Slides for tomorrow night

Andrei Alexandrescu andrei at metalanguage.com
Tue Oct 19 00:44:25 BST 2004


 > Slide 5 and 6:  I think this isn't quite accurate.  Generally reads
 > and writes can't be moved across the lock because lock
 > implementations are carefully designed to make them opaque to the
 > compiler.

Yes, but the language has no notion of opaque, which is what a 
standardization committee deals with. But yes, point taken. I changed 
the slides to gloss over the issue in a different way :o). I've reread 
your example (after optimization):

r = x;
for (...) {
	if (...) { x = r; pthread_mutex_lock(...); r = x; }
	r = ... r ...
	if (...) { x = r; pthread_mutex_unlock(...); r = x; }
}
x = r;

and I will talk about it if anyone asks.

 > Slide 8: My impression is that even if both are volatile, the
 > official pthreads position is that volatile has nothing to do with
 > thread visibility, and therefore you get no gurantees.

True. The issue is what the standard says, and it does say that the 
sequence is preserved. On the other hand, it also says that the 
semantics of "observing" a volatile variable are up to the 
implementation. So there's not much of a guarantee there.

Pthreads wisely chose to stay away from volatile's 
insufficiently-defined semantics.

I attach a modified deck of slides incorporating most of the good 
suggestions that I've gotten. Thanks, and let me know of any more. I 
guess I'll have some more time before the meeting.


Andrei






More information about the cpp-threads mailing list