使用boost线程监控模式

时间:2012-02-04 22:57:07

标签: multithreading boost monitor condition-variable

成为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的目的是什么?在我的情况下,它让我真的很困惑bc我知道等待pthread_cond_t必须用互斥锁锁定 - 但是哪个互斥锁?感谢。

0 个答案:

没有答案