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();
}