gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:42:33 25 4
gpt4 key购买 nike

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

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

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

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

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

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

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

最佳答案

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com