可能重复:
何时使用volatile多线程?
我有两个引用相同的线程boost::shared_ptr:
boost::shared_ptr<Widget> shared;
Run Code Online (Sandbox Code Playgroud)
在线程正在旋转,等待另一个线程重置boost::shared_ptr:
while(shared)
boost::thread::yield();
Run Code Online (Sandbox Code Playgroud)
在某些时候,另一个线程会调用:
shared.reset();
Run Code Online (Sandbox Code Playgroud)
我的问题是我是否需要声明共享指针volatile以防止编译器优化shared.operator bool()对循环的调用并且从不检测更改?我知道如果我只是循环变量,等待它达到0我需要volatile,但我不确定是否boost::shared_ptr以这样的方式实现它是不必要的.
编辑:我完全清楚条件变量可以用来以不同的方式解决这个问题.但在这种情况下,繁忙的循环非常罕见,并且争用条件变量的锁定是我们宁愿不会产生的开销.