プログラムを終了する準備ができるまでループに入れておきたいスレッドがあります。プログラムを終了する準備ができたら、ループから抜け出して終了し、それを呼び出すことができるよう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&' の非 const 参照の無効な初期化</p>
への参照を取得できないのはなぜatomic_bool
ですか? 代わりに何をすべきですか?