@Matthew: True and new in C++11 (and C11 and Java), but nothing to worry about because you'll likely never encounter a processor that can't do single-byte loads and stores.
@Matthias: The memory model says that compilers/processors/caches can't transform potentially infinite loops into non-infinite loops.
@Stephan, quick responses:
- The stop=true; can't be relaxed because otherwise it could float up across the launch (annoying but mostly benign, just causing workers to always immediately stop) or down across the join (oops, program will never terminate).
- The exchange_explicit can't be relaxed because for example part of "new widget" could float up speculatively out of the if.
- Yes, VS 2012 atomic code gen is very pessimized for x86/x64; we're fixing it. ARMv7 code gen is already pretty good, modulo ARMv7's own limitations described in the talk.