2013-05-27 12 views
6
write(T1, balx), read(T2, balx), write(T1, balx), commit(T2), abort(T1) 

Sto rivedendo per un esame e queste sono una delle domande che ho esaminato sulla carta finta.È serializzabile?

Secondo lo schema di marcatura la risposta è che la transazione è serializzabile. Ma non capisco come.

T1 e T2 rimangono intrappolati in un ciclo mentre T1 punta a T2 e quindi punta indietro a T1 in un grafico di precedenza, quindi non rendendolo serializzabile. La marcatura è sbagliata o mi manca qualcosa qui?

+1

Tag: "La serializzazione è il processo mediante il quale un oggetto viene convertito in un formato che può essere memorizzato e successivamente recuperato." – Barmar

+0

questo è il mio errore :). – UmNyobe

risposta

1

Penso che la cosa fondamentale qui sia che T1 abortire. Se non sbaglio fino a quando non si commette una transazione, è sicuro assumere che il disco non è stato modificato. Il che significa che quando T1 interrompe lo stato del database è lo stesso di questa sequenza di operazioni. E questo è il T2 sta visualizzando.

Quindi, se avessimo

write(T1, balx), write(T1, balx), abort(T1), read(T2, balx), commit(T2) 
read(T2, balx), commit(T2), write(T1, balx), write(T1, balx), abort(T1) 

Poi lo stato del database e delle operazioni T2 sarà la stessa di quella nel tuo esempio. Ora se T1 ha commesso, si sarà corretto evocando il grafico della precedenza.

+0

Grazie, molto apprezzato. – user2212485

Problemi correlati