Heads-up: volatile and C++

Ken Raeburn raeburn@raeburn.org
Mon Apr 18 22:18:00 GMT 2005


On Apr 16, 2005, at 15:45, Nathan Sidwell wrote:
> It's not clear to me which is the best approach.  (b) allows threads to
> be supported via copious uses of volatile (but probably introduces
> pessimizations), whereas (a) forces the thread interactions to be 
> compiler
> visible (but shows more promise for optimizations).

Is there anything in the language specifications (mainly C++ in this 
context, but is this an area where C and C++ are going to diverge, or 
is C likely to follow suit?) that prohibits spurious writes to a 
location?  E.g., translating:

   extern int x;
   x = 3;
   foo(); // may call pthread_*
   y = 4;
   bar(); // likewise

into:

   x <- 3
   call foo
   r1 <- x
   y <- 4
   x <- r1
   call bar

...  And does this change if x and y are members of the same struct?  
Certainly you can talk about quality of implementation issues, but 
would it be non-compliant?  It certainly would be unfriendly to 
multithreaded applications, if foo() released a lock and allowed it to 
be acquired by another thread, possibly running on another processor.

To make a more concrete example, consider two one-byte lvalues, either 
distinct variables or parts of a struct, and the early Alpha processors 
with no byte operations, where byte changes are done by loading, 
modifying, and storing word values.

My suspicion is that if the compiler doesn't need to know about threads 
per se, it at least needs to know about certain kinds of restrictions 
on behavior that would cause problems with threads.

Ken



More information about the Gcc mailing list