STM and fairness

Roberto Zunino zunino at di.unipi.it
Fri Feb 29 10:27:45 EST 2008


Josef Svenningsson wrote:
> What I want to know boils down to
> this: what order are processes run which have been woken up from a
> call to retry?

IIUC, the order of wake up is irrelevant, since *all* the threads will 
re-run the transaction in parallel. So, even if thread 1 is the first to 
wake up, thread 2 might beat it in the race, and complete its 
transaction first.

The execution model should be roughly this one: do not lock anything, 
run every read/write to TVar's in parallel, performing copy-on-write so 
that isolation is preserved. When the transaction ends, commit the data 
written in c-o-w's: lock everything, check that previously read data is 
still the same, and if it is overwrite the master copy of Tvars, unlock 
everything.

I suggest you put some random delay in your fairness tests, maybe using 
unsafeIOtoSTM, so that you can improve starvation ;-)

Also, try running a very slow (much-delayed) transaction againts several 
fast ones. I expect the slow one will never reach completion.

AFAIK, achieving fairness in STM can be quite hard (not unlike other 
mainstream approaches to concurrency, sadly).

Zun.


More information about the Glasgow-haskell-users mailing list