On 04/13/2011 05:04 PM, Omer Zak wrote:

If the counter is one byte wide, then any updates to it would be atomic
by definition (of course, the context is that only process M ever
modifies it).

While that is true, I was wrong in asserting that "atomic" is enough. It needs to be ordered with respect to the value updates. the "memory_barrier()" is enough. On x86 with cache coherent everything and using a "lock xadd", it should work as is.

I wondered whether it is enough to realize the counter using two bits.
However such a design won't protect process A from reading inconsistent
data if process M was updating data twice while process A was reading
the same data.

True. You need a no-realistic-possibility-of-overflow counter there. 8 bits if process A reads sufficiently quickly compared to M updates. 64 bits would be sufficient for anything on any processor. 32 bits might be enough for you.

Also, in a fully deterministic system, you might get to a situation
where A and B interlace in such a way that you *always* read the value
while it is being modified, so the shadow value never gets updated. In a
random system, the probability of being more than 'n' updates behind the
producer drops exponentially with n.

The ideal solution needs a mechanism to prevent this theoretical
possibility.

But you also wrote:

> Even a bigger counter won't provide full protection as long as the
> counter can overflow.  We need a way for process A to signal back to
> process M that A is in middle of reading data, so process M should not
> update it this time.

This suffers from the same problem. Either you do locks (which risk blocking), or you risk using an older value (potentially, very old). Or you do a "wait free" algorithm (contrast with "lock free", which is what I described; no locks but has a "wait" - either a busy wait in reading an up-to-date value, or a delay in using an up-to-date value), which is beyond the scope of this email, and probably your implementation.

_______________________________________________
Linux-il mailing list
Linux-il@cs.huji.ac.il
http://mailman.cs.huji.ac.il/mailman/listinfo/linux-il

Reply via email to