boost::condition_variable cond;
boost::mutex mut;
bool ready = false;
void consumer() {
boost::mutex::scoped_lock lock(mut);
while (!ready) {
cond.wait(lock);
}
}
void producer() {
boost::mutex::scoped_lock lock(mut);
ready = true;
cond.notify_all();
boost::this_thread::sleep(boost::posix_time::seconds(4));
}
上記のコードを参照してください。実際には、notify_all() を呼び出した後、プロデューサー スレッドを 4 秒間スリープさせます。ただし、コンシューマ スレッドは実際には 4 秒後に起動されます。では、どうすればこれを回避し、notify_all() を呼び出した直後に 4 秒間のスリープにもかかわらず、コンシューマ スレッドを起動することができますか。前もって感謝します。