作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
如果我像这样在一个线程中更新一个变量:接收计数器++;
然后我只从另一个线程读取这个变量并将其值写入 GUI。
这样安全吗?或者这条指令会不会在中间被中断,导致receiveCounter中的值在被另一个线程读取时是错误的?它一定是正确的,因为++ 不是原子的,它是几条指令。
我不关心同步读取和写入,它只需要递增然后在 GUI 中更新,但这不必在彼此之后直接发生。
我关心的是这个值不能错。就像++操作在中途被打断,所以读取的值完全关闭。
我需要锁定这个变量吗?我真的不想,因为它经常更新。我想我可以通过向主线程发布消息并将值复制到队列来解决这个问题(然后需要锁定队列,但我不会在每次更新时都这样做)。
不过我还是对上面的问题感兴趣。
最佳答案
如果一个线程更改变量中的值,而另一个线程读取该值,并且程序不同步访问,它就会发生数据竞争,并且程序的行为是未定义的。更改 receiveCounter
的类型至 std::atomic<int>
(假设它是一个 int
开始)
关于c++ - 是 x++;线程安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18268893/
我是一名优秀的程序员,十分优秀!