przekazywanie atomowych typów danych do funkcji

0

Witam. W jaki sposób można poprawnie przekazać atomowy typ danych atomic<bool> readyFlag do funkcji, aby korzystała z niego zmienna warunkowa readyCondVar? Przy obecnym kodzie otrzymuje błędy w wierszu 16:

readyCondVar.wait(ul, [] {return readyFlag.load(); });

1. * zmienna lokalna funkcji otaczającej nie może być przywoływana w treści wyrażenia lambda, chyba że znajduje się ona na liście przechwytywania*
2. * readyFlag nie może być niejawnie przechwycone, ponieważ nie określono żadnego domyślnego trybu przechwytywania
*

#include <iostream>
#include <condition_variable>
#include <mutex>
#include <future>
#include <atomic>
using namespace std;

void thread1(atomic<bool> &readyFlag, condition_variable &readyCondVar) {
	readyFlag.store(true);
	readyCondVar.notify_one();
}

void thread_aim(atomic<bool> &readyFlag, mutex &readyMutex, condition_variable &readyCondVar) {
	{
		unique_lock<mutex> ul(readyMutex);
		readyCondVar.wait(ul, [] {return readyFlag.load(); });
	}
}

int main() {
	atomic<bool> readyFlag(false);
	mutex readyMutex;
	condition_variable readyCondVar;

	future<void> f1 = async(launch::async, thread1, ref(readyFlag), ref(readyCondVar));
	future<void> f2 = async(launch::async, thread_aim, ref(readyFlag), ref(readyMutex), ref(readyCondVar));

	cin.get();
}
1
readyCondVar.wait(ul, [&readyFlag] {return readyFlag.load(); });

Tłumaczenie komunikatu błędu jest trochę bez sensu.

0

Visual Studio 2017 RC.
Dziękuję za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1