我有一个线程,我想坐在一个循环中,直到我准备好退出程序,此时我希望它跳出循环并退出,以便我可以调用std::thread::join
它。在 c++03 的日子里,我只会使用一个受锁保护的 bool 来告诉线程何时退出。这次我想我会利用新的原子库(特别是std::atomic_bool
),但我遇到了麻烦。下面是我的测试用例:
#include <atomic>
#include <thread>
#include <cstdio>
using namespace std;
void setBool(atomic_bool& ab)
{
ab = true;
}
int main()
{
atomic_bool b;
b = false;
thread t(setBool, b);
t.join();
printf("Atomic bool value: %d\n", b.load());
return 0;
}
当我尝试编译时,声明thread t
吐出这个怪物。错误的核心部分似乎是:
从“std::atomic_bool”类型的右值初始化“std::atomic_bool&”类型的非常量引用无效</p>
为什么我无法获得对 a 的引用atomic_bool
?我应该怎么做?