On Fri, Oct 17, 2008 at 08:06:55PM +0200, Joern
Nettingsmeier wrote:
excuse my chiming in here, i'm not really
much of a c programmer... but
how can this
- rb->read_ptr += n1;
- rb->read_ptr &= rb->size_mask;
+ rb->read_ptr = (rb->read_ptr + n1) & rb->size_mask;
fix anything?
iiuc, both versions are equivalent. a context switch could happen just
as well after the parenthesis has been computed..!?
putting stuff on one line doesn't make it atomic. maybe you are now
getting another compiler optimization that helps to hide the bug?
The idea is that it is very unlikely that the compiler
would store the intermediate result in rb->read_ptr,
and so this value is updated only once.
i see. but what about the other scenario:
thread A reads read_ptr.
thread B runs and increments it.
thread A increases the old (wrong) read_ptr value by one and writes a
wrong value.
isn't that a problem here?
--
jörn nettingsmeier
home://germany/45128 essen/lortzingstr. 11/