我有以下代码
int i; //gobal var
Thread1:
{
...
i=some value;
}
Thread2:
{
if (i==2) dosomething();
else dosomethingelse();
i = 4;
}
我想把它写成线程安全,而不使用同步对象和C ++标准方式。
我的问题是如何让一个变量通过不同的线程读取/写入访问而不使用同步?我的要求是有一个bool变量,可以有真或假。
volatile变量是原子的。
请注意,我不应该使用任何具有原子变量的TBB等图书馆。
每次我们访问线程中的变量时,我们都不想提出这个问题的原因,因为这个变量并不常见。
答案 0 :(得分:0)
你的代码现在没有任何意义。你基本上都在说'
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。