Sat Mar 27 18:00:37 CET 2010
RP: race conditions
So, what happens when a pull and a push interfere? Or can't they?
It seems they can; i.e. invalidation can take a ``different branch''
compared to a parallel evaluation step.
Suppose the computation needs to evaluate:
a + b
which both depend on a common value c which is about to be
invalidated, but the invalidation is interleaved with the evaluation
force: cache a x
inval: clear a
inval: clear b
force: compute b x
then the value a, b seen by the force correspond to different
histories, leading to possibly inconsistent data.
Another problem is that concurrent evaluations might interfere.
I.e. a two threads might start re-evaluations in parallel.
The same goes for concurrent invalidation.
How to solve these problems?
It seems like synchronization on both sides separately isn't much of a
problem: node locking should be enough. However, for push/pull sync I
don't see how to do this except for locking the whole network.