軽量の spin_lock を実装するために、ユーザー モード スレッドで揮発性変数をスピンすることが安全かどうかはよくわかりません。tbb ソース コード tbb_machine.h:170 を調べました。
//! Spin WHILE the value of the variable is equal to a given value
/** T and U should be comparable types. */
template<typename T, typename U>
void spin_wait_while_eq( const volatile T& location, U value ) {
atomic_backoff backoff;
while( location==value ) backoff.pause();
}
そして、私が見ることができるように、atomic_backoff クラスにはフェンスがありません。他のユーザーモードの spin_lock 実装からのものですが、それらのほとんどは CAS (Compare and Swap) を使用します。