吗?-6ren"> 吗?-我需要设置一个标志让另一个线程退出。那个其他线程不时检查退出标志。我是否必须对标志使用 atomic 或仅使用纯 bool 就足够了,为什么(举例说明如果我使用纯 bool 可能会出现什么问题)? #-6ren">
gpt4 book ai didi

c++ - 我必须对 "exit"bool 变量使用 atomic 吗?

转载 作者:IT老高 更新时间:2023-10-28 12:47:58 26 4
gpt4 key购买 nike

我需要设置一个标志让另一个线程退出。那个其他线程不时检查退出标志。我是否必须对标志使用 atomic 或仅使用纯 bool 就足够了,为什么(举例说明如果我使用纯 bool 可能会出现什么问题)?

#include <future>
bool exit = false;
void thread_fn()
{
while(!exit)
{
//do stuff
if(exit) break;
//do stuff
}
}
int main()
{
auto f = std::async(std::launch::async, thread_fn);
//do stuff
exit = true;
f.get();
}

最佳答案

Do I have to use atomic for “exit” bool variable?

是的

使用atomic<bool> ,或通过(例如)std::mutex 使用手动同步.您的程序当前包含一个数据竞争,一个线程可能读取一个变量,而另一个线程正在写入它。这是未定义的行为。

根据 C++11 标准的第 1.10/21 段:

The execution of a program contains a data race if it contains two conflicting actions in different threads, at least one of which is not atomic, and neither happens before the other. Any such data race results in undefined behavior.

冲突”的定义见第 1.10/4 段:

Two expression evaluations conflict if one of them modifies a memory location (1.7) and the other one accesses or modifies the same memory location.

关于c++ - 我必须对 "exit"bool 变量使用 atomic<bool> 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16111663/

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