多个线程中的变量访问,不同步

时间:2011-09-15 09:03:57

标签: c++ multithreading synchronization

我有以下代码

int i; //gobal var

Thread1:
{
...
  i=some value;
}

Thread2:
{
  if (i==2) dosomething();
  else dosomethingelse();
  i = 4;
}

我想把它写成线程安全,而不使用同步对象和C ++标准方式。

我的问题是如何让一个变量通过不同的线程读取/写入访问而不使用同步?我的要求是有一个bool变量,可以有真或假。

volatile变量是原子的。

请注意,我不应该使用任何具有原子变量的TBB等图书馆。

每次我们访问线程中的变量时,我们都不想提出这个问题的原因,因为这个变量并不常见。

1 个答案:

答案 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