从线程读取全局变量并从另一个线程写入该变量

时间:2013-08-16 05:05:07

标签: multithreading thread-safety mutex

我的程序有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

}

2 个答案:

答案 0 :(得分:1)

是的,你应该(在大多数情况下)。互斥锁将确保您正在保护的数据可以从多个竞争CPU中正确显示。除非遇到性能问题,否则应使用互斥锁。如果性能是个问题,请查看无锁数据结构。

答案 1 :(得分:1)

如果您不使用任何同步,那么当第二个线程看到更新的值时,它完全不可预测。这范围介于几纳秒和从不之间。当然 never 结果特别麻烦,当你没有声明变量 volatile 并运行你的Release版本时,它可能发生在x86处理器上程序。具有弱内存模型的处理器(如ARM内核)可能需要很长时间。您唯一不必担心的是看到部分更新的值, int 更新是原子的。

关于发布的代码可以说的所有内容。细粒度锁定很少有效。