On Sat, Oct 27, 2007 at 09:25:09 +1000, skaller wrote: > Yes, but with a class: > > struct X { > int x; > void f() { if (C) x = 1; } > void f2() { reg = x; if (c) reg = 1; x = reg; } > };
Hmm, indeed, and the example may end right here, you don't have to allocate global X. x member is "shared" among all X member functions, so if both X::f() and X::f2() are called concurrently for the same object without the lock, you are in trouble, even if you know only one of them might modify the x for current conditions. Since both f() and f2() implicitly get 'this' pointer, the situation when "the address of some local var is taken" is more frequent then I thought before, thanks for pointing this. Then perhaps all unconditional speculative stores should be avoided (unless there's also explicit unconditional store), without the need to analize whether it is safe or not. -- Tomash Brechko