It is a common misconception that the "volatile" keyword is necessary
or even helpful to code the implements locks and atomic operations.

What you really want is a "memory barrier" that prevents the compiler
from emitting your machine code in the incorrect order, as well as
preventing microprocessors that can do out of order execution from
reordering your instructions.

If you did not have such a memory barrier, then it could easily happen
that the payload portion of your critical section is placed outside
the region that is protected by your lock.

The popular but misunderstood use of the volatile keyword is the
result of certain, specific compilers on certain specific instruction
set architectures implementing volatile variables by generating memory
barrier machine code.

It can easily happen that your lock works properly anyway, but even if
so, the use of volatile will make your code both slower and larger.

I was quite surprised at this fact myself.  My bookmark for the page
where I learned all about this is on my other computer, but if I
remember correctly it was written by an Intel engineer who was one of
the developers of an Intel open source multithreaded toolkit.  That
toolkit did use volatile everywhere at first, but when Intel opened
the source and so had to support ISAs other than Intels, they removed
all the volatiles and replaced them with explicit memory barriers.

Contrary to Ken Thomases' assertion, there are all kinds of reasons to
use atomic operations as locking primitives.  One is that they cannot
result in process context switches; if you are certain that you will
release the lock quite quickly, it is a whole lot faster, and uses
less memory, to use atomic arithmetic.

I'll send you my bill in the mail,

Don Quixote
-- 
Don Quixote de la Mancha
Dulcinea Technologies Corporation
Software of Elegance and Beauty
http://www.dulcineatech.com
quix...@dulcineatech.com
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to