On Thu, 21 Nov 2013, Marc Glisse wrote:
On Thu, 21 Nov 2013, Andrew Makhorin wrote:
Hello,
I have a C code like this:
int foo(void)
{ int phase;
. . .
phase = 1;
phase = 2;
phase = 3;
. . .
}
In case of -O0 gcc generates machine instructions for every
assignment 'phase = ...'. But in case of -O2 gcc does not generate
instructions for some assigments. Of course, this is correct. However,
is there any way to tell gcc that 'phase' object is inspected by another
thread, so it should not remove such statements?
volatile
Well, volatile will prevent the operations from being removed. For proper
synchronization with other threads, using atomic operations with the right
synchronization parameter sounds better.
http://gcc.gnu.org/onlinedocs/gcc/_005f_005fatomic-Builtins.html
--
Marc Glisse