c++ - 不同步的多线程中的变量访问

标签 c++ multithreading synchronization

我有以下代码

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/

相关文章:

c++ - 英特尔 PIN :Initial Set up of Intel PIN tool

C++: &a[2] - &a[1] ==?

Java 服务器 - 多个端口?

Java 单例和同步

java - 同步对象并更改其字段之一

java - 如何保持对象实例同步

c++ - 使用 C++(windows) 在 VS 代码中调试 C++ 时出错

C++ 变量类型限制

java - 关于 Callable 接口(interface)中的 call() 方法。在call()中调用其他静态方法时,是否会阻塞并影响性能?

java - 尝试编写一个类,允许在线程启动之前和线程完成之后执行某些操作