我的程序有2个线程和一个int全局变量。一个线程正在读取该变量,而其他线程正在写入该变量。在这种情况下我应该使用互斥锁。
这些函数在我的程序中同时重复执行2个线程。
void thread1()
{
if ( condition1 )
iVariable = 1;
else if ( condition2 )
iVariable = 2;
}
void thread2()
{
if ( iVariable == 1)
//do something
else if ( iVarable == 2 )
//do another thing
}
答案 0 :(得分:1)
是的,你应该(在大多数情况下)。互斥锁将确保您正在保护的数据可以从多个竞争CPU中正确显示。除非遇到性能问题,否则应使用互斥锁。如果性能是个问题,请查看无锁数据结构。
答案 1 :(得分:1)
如果您不使用任何同步,那么当第二个线程看到更新的值时,它完全不可预测。这范围介于几纳秒和从不之间。当然 never 结果特别麻烦,当你没有声明变量 volatile 并运行你的Release版本时,它可能发生在x86处理器上程序。具有弱内存模型的处理器(如ARM内核)可能需要很长时间。您唯一不必担心的是看到部分更新的值, int 更新是原子的。
关于发布的代码可以说的所有内容。细粒度锁定很少有效。