Heads-up: volatile and C++
Gabriel Dos Reis
gdr@integrable-solutions.net
Fri Apr 15 07:54:00 GMT 2005
Gabriel Dos Reis <gdr@integrable-solutions.net> writes:
| Richard Henderson <rth@redhat.com> writes:
|
| | On Thu, Apr 14, 2005 at 11:30:20PM +0200, Jason Merrill wrote:
| | > Consider Double-Checked Locking
| | > (http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html).
| | > I used DCL with explicit memory barriers to implement thread-safe
| | > initialization of function-local statics
| | > (libstdc++-v3/libsupc++/guard.cc). The proposed change to volatile
| | > semantics would allow me to write it more simply, by just making the
| | > initialized flag volatile. Yes, volatile would be stronger than is
| | > actually necessary for DCLP, but I don't have to use it if I want
| | > finer-grained control over the synchronization.
| |
| | Is there any reason to want to overload volatile for this, rather than
| |
| | template<classname T> T acquire(T *ptr);
| | template<classname T> void release(T *ptr, T val);
| |
| | where the functions do the indirection plus the memory ordering?
|
| My understanding what that some compilers may do "speculative register
| promotion".
| (I think the example given by Hans actually involved lock()/unlock()
| not acquire/release).
Jason (seating next to me) just pointed out to me that "volatile" did
not appear in the example shown by Hans -- as I mistakenly thought.
So ignore my message. Sorry for the confusion.
-- Gaby
More information about the Gcc
mailing list