Mam wątek, który chcę zasiadać w pętli, dopóki nie będę gotowy do zakończenia programu, w którym to momencie chcę, żeby wyszło z pętli i wyjdź, abym mógł zadzwonić pod numer std::thread::join
. W dniach C++ 03, po prostu użyłbym bool chronionego przez blokadę, aby powiedzieć wątkowi kiedy wyjść. Tym razem pomyślałem, że skorzystam z nowej biblioteki atomów (konkretnie std::atomic_bool
), ale mam problem. Poniżej jest mój przypadek testowy:Używanie atomów z std :: thread w 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;
}
Deklaracja thread t
wypluwa this potworność gdy próbuję skompilować. Centralna część błędu wydaje się być:
nieważny inicjalizacji const odniesienia typu „std :: atomic_bool &” z rvalue typu „std :: atomic_bool”
Dlaczego czy nie mogę uzyskać odwołania do atomic_bool
? Co powinienem zamiast tego zrobić?
@NicolBolas Jak to zrobić? Czy blokowanie zmiennej za pomocą muteksu przed uzyskaniem dostępu do niej to standardowy sposób udostępniania danych między wątkami? –
Och, racja. Nevermind ... –