我有以下代码
int i; //gobal var
Thread1:
{
...
i=some value;
}
Thread2:
{
if (i==2) dosomething();
else dosomethingelse();
i = 4;
}
我想在不使用同步对象的情况下以 C++ 标准方式将其编写为线程安全的。
我的问题是如何让一个变量在不使用同步的情况下由不同的线程进行读/写访问?我的要求是有一个 bool 变量,它可以是 true 或 false。
volatile变量是原子的吗
请注意,我不应该使用任何像 TBB 这样具有原子变量的库。
问这个问题的原因是我们不想在每次访问线程中的变量时都获取和释放信号量,因为这个变量变化不频繁。
最佳答案
那么你的代码现在没有任何意义。因为你基本上是在说`
Thread2:
{
if (i==2) dosomething();
//let's do something if i is 2 at the moment I am reading it.
else dosomethingelse();
i = 4;
}`
没关系。但是,如果您正在使用 i
做某事,那么您就有麻烦了。
如果不是,如果你问访问 i
是否是原子的,这取决于 cpu 架构。例如对于 x86 和 x64,它是原子的。阅读this .
关于c++ - 不同步的多线程中的变量访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7428364/