我对volatile
的使用情况有疑问。我通常会尝试跨线程共享的所有变量都具有volatile
关键字,以确保直接访问内存,并且当然通过互斥锁保护。多线程应用程序中的易失性C/C++
但是,如果共享变量以确保一致性,真的需要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
,它不能变化。如果没有volatile
关键字,我不能100%确定这种方法是安全的。
谢谢。
编辑:适当重新构造问题。
只要你的变量访问由互斥保护 - [你没有使用'volatile']( http://stackoverflow.com/questions/11172922/does-stdmutex-create-a-fence) –
所以,如果我得到您的评论。那么在锁释放后,所有在互斥体/信号量/ CriticalSection中访问的变量都会刷新并可见于其他线程? – DarkZeros
@DarkZeros正好!这就是它的工作原理。 –