프로그램을 종료 할 준비가 될 때까지 루프에 앉아있는 스레드가 있습니다.이 스레드는 루프에서 빠져 나오기를 원합니다. 나가서 std::thread::join
라고 부를 수 있습니다. C++ 03 시절에 스레드를 종료 할 때 알려주기 위해 잠금으로 보호 된 bool을 사용했습니다. 이번에는 새로운 원자학 라이브러리 (특히 std::atomic_bool
)를 활용할 것이라고 생각했지만 문제가 있습니다. 내가 컴파일 할 때C++에서 std :: thread와 함께 atomics 사용하기
#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 괴물을 뱉어 : 다음은 내 테스트 케이스이다. 오류의 중앙 부분이 될 것으로 보인다 :
유형의 const가 아닌 참조의 잘못된 초기화 '표준 : atomic_bool &'유형 '표준 : atomic_bool'
왜의를 rvalue에서 atomic_bool
에 대한 참조를 얻을 수 없습니까? 대신 무엇을해야합니까?
@NicolBolas 어떻게 그렇게됩니까? 스레드간에 데이터를 공유하는 표준 방법에 액세스하기 전에 뮤텍스로 변수를 잠그지 않습니까? –
아, 맞아. 절대로 ... –