【发布时间】:2011-09-15 09:03:57
【问题描述】:
我有以下代码
int i; //gobal var
Thread1:
{
...
i=some value;
}
Thread2:
{
if (i==2) dosomething();
else dosomethingelse();
i = 4;
}
我想在不使用同步对象的情况下以 C++ 标准方式将其编写为线程安全的。
我的问题是如何在不使用同步的情况下让不同线程读/写访问的变量?我的要求是有一个布尔变量,它可以是真或假。
易失性变量是原子的吗。
请注意,我不应该使用任何像 TBB 这样具有原子变量的库。
问这个问题的原因是我们不想在每次访问线程中的变量时都获取和释放信号量,因为这个变量不经常改变。
【问题讨论】:
-
阅读 Boost Atomics 和 c++0x 线程规范。 @ 987654322@ sic,您想要的任何其他内容 :) - 您可以,对于安全的不同定义。如果模糊足够好并且您的代码可以处理偶尔读取“幻像”值,那么只要有一个写入器,您就不需要锁定。 (这可能对实时监控机制有用)。此外,如果变量不经常更改,它似乎是条件变量的良好候选者。
-
你能用简单的例子展示如何在上述场景中使用条件变量。我的理解是条件变量阻塞而不是前进,但我想循环
-
有多少线程正在读取变量,有多少线程可能改变它?
-
只有两个线程,一个读一个写
标签: c++ multithreading synchronization