<p dir="ltr">That's more or less correct :).  Volatile write will cause store buffer to drain before CPU can proceed to next instruction.  Cache line invalidation/request-for-ownership coherence traffic is part of normal store operations as well (once the store makes its way to L1).</p>

<p dir="ltr">Sent from my phone</p>
<div class="gmail_quote">On Feb 13, 2013 1:46 PM,  <<a href="mailto:thurston@nomagicsoftware.com">thurston@nomagicsoftware.com</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Thanks for your responses.<br>
My understanding is that a volatile *write* does entail invalidating all CPUs' L1,L2... caches that have cached the volatile reference.  But so does a lock/unlock cycle; is that more or less correct?<br>
<br>
On 2013-02-13 08:54, Stanimir Simeonoff wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Obtaining the lock already requires reading a volatile and it<br>
involves an atomic operation (volatile write at the least) + some<br>
state store.<br>
The lock release needs volatile store (or at least ordered write) +<br>
queue checking if anyone has gone asleep waiting for the lock.<br>
<br>
Overall volatile reads are cheap and almost free on x86.<br>
<br>
Stanimir<br>
<br>
On Wed, Feb 13, 2013 at 6:36 PM, <<a href="mailto:thurston@nomagicsoftware.com" target="_blank">thurston@nomagicsoftware.com</a>> wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hello,<br>
<br>
I was wondering what requires more overhead: reading a volatile reference or obtaining a lock when there is no contention.<br>
<br>
Essentially I have a single-reader scenario, where the common-path (99%+) doesn't require either a volatile read or a lock; but if I want to support a few very-rarely used cases, I can only make it thread-safe by making the 99% case rely on a volatile read or obtain a lock.<br>

Any guidelines?<br>
<br>
Thanks<br>
<br>
______________________________<u></u>_________________<br>
Concurrency-interest mailing list<br>
<a href="mailto:Concurrency-interest@cs.oswego.edu" target="_blank">Concurrency-interest@cs.<u></u>oswego.edu</a><br>
<a href="http://cs.oswego.edu/mailman/listinfo/concurrency-interest" target="_blank">http://cs.oswego.edu/mailman/<u></u>listinfo/concurrency-interest</a> [1]<br>
</blockquote>
<br>
<br>
<br>
Links:<br>
------<br>
[1] <a href="http://cs.oswego.edu/mailman/listinfo/concurrency-interest" target="_blank">http://cs.oswego.edu/mailman/<u></u>listinfo/concurrency-interest</a><br>
</blockquote>
<br>
______________________________<u></u>_________________<br>
Concurrency-interest mailing list<br>
<a href="mailto:Concurrency-interest@cs.oswego.edu" target="_blank">Concurrency-interest@cs.<u></u>oswego.edu</a><br>
<a href="http://cs.oswego.edu/mailman/listinfo/concurrency-interest" target="_blank">http://cs.oswego.edu/mailman/<u></u>listinfo/concurrency-interest</a><br>
</blockquote></div>