我有一个线程,我想让它处于循环中,直到我准备好退出程序,此时我希望它跳出循环并退出,以便我可以调用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
吐出this http://pastebin.com/SpRQW4W1当我尝试编译时,这是一个怪物。错误的中心部分似乎是:
从“std::atomic_bool”类型的右值对“std::atomic_bool&”类型的非常量引用进行无效初始化
为什么我无法获得对atomic_bool
?我该怎么办?
您必须明确地将引用传递给您的线程。使用std::ref
将创建一个std::reference_wrapper
它是可复制的并将引用传递给您的函数。
thread t(setBool, std::ref(b));
否则它会尝试复制你的原子,这是不可复制的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)