c++ - 是 x++;线程安全?

标签 c++ multithreading atomic

如果我像这样在一个线程中更新一个变量: 接收计数器++;

然后我只从另一个线程读取这个变量并将其值写入 GUI。

这样安全吗?或者这条指令会不会在中间被中断,导致receiveCounter中的值在被另一个线程读取时是错误的?它一定是正确的,因为++ 不是原子的,它是几条指令。

我不关心同步读取和写入,它只需要递增然后在 GUI 中更新,但这不必在彼此之后直接发生。

我关心的是这个值不能错。就像++操作在中途被打断,所以读取的值完全关闭。

我需要锁定这个变量吗?我真的不想,因为它经常更新。我想我可以通过向主线程发布消息并将值复制到队列来解决这个问题(然后需要锁定队列,但我不会在每次更新时都这样做)。

不过我还是对上面的问题感兴趣。

最佳答案

如果一个线程更改变量中的值,而另一个线程读取该值,并且程序不同步访问,它就会发生数据竞争,并且程序的行为是未定义的。更改 receiveCounter 的类型至 std::atomic<int> (假设它是一个 int 开始)

关于c++ - 是 x++;线程安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18268893/

相关文章:

c - 如何防止通过原子比较和交换实现的并发lifo堆栈中的损坏

c++ - 命名空间 'atomic' 中没有名为 'std' 的类型

c++ - 抽象类错误,看 ""的声明是抽象的

java - 什么时候 AtomicInteger 优于同步?

c++ - p_thread : exit from multiple threads

ios - 等待多个异步下载任务

c++ - 为什么 std::atomic 对象不可复制?

c++ - 为 STL sort() 重载 "< "

C++ : How to specialize a member function for a template Array-like class A to deal with A<A<T>>?

c++ - 使用服务器的实际 IP 和端口连接到多播服务器