Tôi có một chuỗi mà tôi muốn ngồi trong vòng lặp cho đến khi tôi sẵn sàng thoát khỏi chương trình, tại thời điểm đó tôi muốn nó thoát ra khỏi vòng lặp và thoát ra để tôi có thể gọi số std::thread::join
trên đó. Trong những ngày của c + + 03, tôi sẽ chỉ sử dụng một bool được bảo vệ bởi một khóa để cho biết thread khi để thoát. Lần này tôi nghĩ rằng tôi sẽ tận dụng lợi thế của thư viện nguyên tử mới (cụ thể là std::atomic_bool
), nhưng tôi đang gặp rắc rối. Dưới đây là trường hợp thử nghiệm của tôi:Sử dụng nguyên tử với std :: thread in C++ 11
#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;
}
Tờ khai thread t
spits ra this quái khi tôi cố gắng để biên dịch. Phần trung tâm của lỗi có vẻ là:
khởi không hợp lệ tham chiếu không const kiểu 'std :: atomic_bool &' từ một rvalue của loại 'std :: atomic_bool'
Tại sao sao tôi không thể tham chiếu đến một số atomic_bool
? Tôi nên làm gì?
@NicolBolas Làm thế nào? Không phải là khóa một biến với một mutex trước khi truy cập nó một cách tiêu chuẩn để chia sẻ dữ liệu giữa các chủ đề? –
Ồ, đúng vậy. Nevermind ... –