这段代码是线程安全的吗?我需要在函数签名中加上volatile吗?(例如:void Unlock() volatile {v=0;}
)如果不是,我该如何使其线程安全?
class SimpleLock {
std::atomic<int> v;
public:
bool try_lock() { int z=0; return v.compare_exchange_strong(z, 1); }
void lock() { while(try_lock()==false) std::this_thread::yield(); }
void unlock() {v=0;}
};
lock
的线程正在与持有锁的线程在同一物理核心上运行。哎呀!) - David Schwartz