我对volatile
用法有疑问。我通常尝试跨线程共享的所有变量都具有volatile
确保直接内存访问的关键字,当然还使用互斥锁进行保护。
但是,volatile
如果共享变量以确保一致性,是否真的需要?
我用一个例子来解释:
Thread1: //(affects it behaviour with the variable)
mymutex.lock();
if(variable)
{
...
variable = false;
}
mymutex.unlock();
Thread2:
mymutex.lock();
variable = true;
mymutex.unlock();
在上面的示例中,thread2
仅写入和thread1
读取/写入。是否有可能variable
被缓存并且线程不读取新值?即使互斥锁设置正确?volatile
在这种情况下我需要吗?
我问这个是因为我有一个变量而不是变量std::vector
,它不能是易变的。而且我不是 100% 确定这种方法在没有volatile
关键字的情况下是安全的。
谢谢。
编辑:正确地重新提出问题。