0

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

}
4

2 回答 2

1

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

这就是关于发布代码的所有内容。细粒度的锁定很少能很好地工作。

于 2013-08-16T10:25:18.333 回答
1

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

于 2013-08-16T05:30:26.910 回答