[libdispatch-dev] lib dispatch worker threads may loop depending on compiler optimization
bonzini at gnu.org
Fri Sep 9 10:30:02 PDT 2011
On 09/09/2011 05:49 PM, Dave Zarzycki wrote:
>>> No, it didn't. Really, believe me, unlike you I can follow GCC
> If putting asm("" ::: "memory") before __sync_lock_test_and_set()
> fixes the bug, then that proves that GCC no longer considers
> __sync_lock_test_and_set() to be a full barrier.
It is not "no longer". It never did, and it worked by chance.
It doesn't even consider it an acquire barrier, in fact. Even for a
cmpxchg or any other sync builtin, the barrier semantics remain in the
assembly, but are lost for the compiler midway through the compilation.
More information about the libdispatch-dev