От: | rsdn_179b | ||
Дата: | 01.04.15 23:29 | ||
Оценка: |
... Правильный взгляд даёт понимание таких вещей, и как ложные пробуждения ...
#include <thread>
#include <mutex>
#include <condition_variable>
#include <iostream>
#include <queue>
#include <random>
...
std::mutex g_lockqueue;
std::condition_variable g_queuecheck;
...
bool g_notified;
void workerfunc(int id, std::mt19937& generator)
{
...
g_notified = true;
g_queuecheck.notify_one();
...
}
void loggerfunc()
{
...
std::unique_lock<std::mutex> locker(g_lockqueue);
while(!g_notified) // used to avoid spurious wakeups
{
g_queuecheck.wait(locker);
}
...
}