0

我已经使用 Boost 线程编写了一个程序。我已经分配了两个缓冲区(每个工作线程一个)来存储他们要处理的一些信息。他们坐下来等待缓冲区上出现一些东西,然后他们处理它并将结果放到不同的缓冲区中。我的缓冲区实现是线程安全的。目前,我让主线程忙于等待缓冲区大小为零,但这确实效率低下,因为它必须不断请求对缓冲区的控制然后检查大小。我想要一种让主线程休眠的方法,直到两个工作线程都表示它们已完成。我相当肯定这可以通过使用来实现,boost::condition_variable但我不确定如何使用两个工作线程来做到这一点。

非常感谢帮助。

编辑 - 另外,也boost::barrier适合吗?

4

2 回答 2

2

你也可以使用 thread::join 方法。此方法将等待线程完成(线程函数返回)。

有关加入的更多信息。

我不认为这个障碍可以帮助你。屏障允许停止线程处理,直到所有线程都遇到屏障。当所有线程都调用了barrier::wait时,所有线程停止等待。

于 2012-08-14T05:57:00.410 回答
1

缓冲区大小为 0 似乎是条件变量的谓词。该大小必须以某种方式受到互斥锁的保护。无论何时锁定该互斥体以更改缓冲区大小,都必须在大小为零时向条件变量发出信号。

一个新的 wait_for_zero_size() 函数必须锁定互斥体,并在条件不成立时在等待条件变量的循环中查找该谓词:

void buffer::wait_for_zero_size()
{
    boost::mutex::scoped_lock lock( mutex_ );

    while ( size_ != 0 )
        condition_.wait( lock );
}

HTH,托尔斯滕

于 2012-08-14T06:11:10.200 回答