Boost.Thread有一个barrier类,其目的是阻止多个线程,直到指定的数字到达屏障.
您只需创建一个boost::barrier初始化为3,意味着它会阻塞,直到三个线程在屏障上等待.当你的每个线程都在等待数据时,你可以让它们调用wait()屏障.当第三个线程调用时wait(),所有三个线程将继续执行.
boost::barrier barrier(3);
void thread_function()
{
read_data();
barrier.wait(); // Threads will block here until all three are ready.
process_data();
}
Run Code Online (Sandbox Code Playgroud)
如果您只想要一个线程来处理数据,您可以检查返回值wait(); 该函数仅对屏障中的一个线程返回true.