{[ promptMessage ]}

Bookmark it

{[ promptMessage ]}

This is still linearizable the transactions appear to

Info iconThis preview shows page 1. Sign up to view the full content.

View Full Document Right Arrow Icon
This is the end of the preview. Sign up to access the rest of the document.

Unformatted text preview: don’t have locks, we might have allowed some other transaction to read a file we modified, or to write a file we had read. If that transaction finishes before we do, it means one or the other of us needs to abort. You can prove that you make progress by showing that one or the other will succeed – if someone invalidates your reads by committing a write before you are able to commit, then it means that some transaction committed, and there’s progress. Likewise, if you aren’t able to commit a write because you depend on someone else’s writes, that means they’ll be able to commit, even if you needed to abort. The simple way to think about this is that you pick Ti at the time of the commit, after all other commits so far. But we do have a bit more flexibility: we are safe picking an earlier virtual time, Tj < Ti, if the reads are consistent with the state of the storage system at time Tj, and the writes hadn’t been read by any transaction after Tj. To make this work, we need to keep track of the versions of each file that are read or written as part of any transaction. So for example, computing the sum of all bank balances becomes easy – compute on the old version of the bank balances, allowing later updates to proceed. We can then garbage collect the old bank balances when the sum finishes. Other transactions can start and even finish, as long as they don’t depend on the output of th...
View Full Document

{[ snackBarMessage ]}

Ask a homework question - tutors are online