我不太确定在用户模式线程中旋转 volatile 变量是否安全,以实现轻量级 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(比较和交换)。