我有一个类型为double
的共享变量。这个变量将被两个线程访问。一个线程永远只写变量,而另一个线程永远只读变量。共享变量的争用条件
我还有比赛条件吗?如果是的话,C++中有没有一种“简单”的方式来实现原子访问?如果读取数比写入数多得多,我如何有效地实现它?我是否需要将变量标记为volatile
?
编辑:确定“读取器”线程周期性地在批量数据上工作,并且新值的传播不是时间敏感的。我可以声明写入器线程将写入的另一个临时变量,而不是实现复杂的互锁,而我没有很好的方法来测试。然后,当阅读器完成一个批处理时,它可以将临时值自动传播到实际变量。那会是无竞赛条件的吗?
@Jesse:许多编译器不具有该头的工作实现呢。 – 2012-04-17 22:38:19
一个简单的互斥体可以在这里工作,以确保您正在阅读良好的价值。当写入线程正在使用变量时,互斥锁将阻止对变量的访问,并在读取线程完成工作时解锁它。在unix和windows上,实现都非常简单。 – Chris911 2012-04-17 22:38:47
@ Chris911:互斥锁不必要的昂贵,可能会阻塞一个线程。有一个可以等待的实现。 – 2012-04-17 22:45:22