作为 boost::thread 的新手,前几天我正在尝试编写一个 BlockingQueue(在我看来,这是有史以来最实用的同步构造)。这是使用信号量或条件变量完成的,以前在 Windows 和 linux 上都做过,但从未使用过 boost。
因此,在您可以使用“监视器”的语言中(您知道,具有锁定、等待和通知功能的语言)您只需使用它:
T BlockingQueue::take()
{
scopelock(monitor);
while (queue.empty())
monitor.wait();
T ret = queue.front();
queue.pop();
return ret;
}
据我所知,“监视器”是使用 boost::condition_variable_any 和 boost::mutex 完成的。但是,condition_variable_any 已经包含一个互斥锁!(称为 internal_mutex)。所以这就是为什么我起初认为 condition_variable_any 是整个监视器,但事实证明互斥锁不能从外部访问,并且在等待之前不能锁定它等等。
任何人都知道 boost::condition_variable_any::internal_mutex 的目的是什么?就我而言,这让我很困惑,因为我知道等待 pthread_cond_t 必须在互斥锁锁定的情况下完成 - 但是哪个互斥锁?谢谢。