我有一个程序,有 3 个线程。它们都从不同端口上的以太网获取数据。其中 3 个线程的数据频率可能不同。但所有传入的数据必须同时处理。
因此,如果一个线程有一个数据到来,它必须等待其他数据到来。我怎样才能得到它?
最佳答案
Boost.Thread 有一个 barrier类,其目的是阻塞多个线程,直到指定数量达到屏障。
您只需创建一个初始化为 3 的 boost::barrier
,这意味着它会阻塞,直到三个线程在屏障上等待。当每个线程完成数据等待后,您可以让它们在屏障上调用 wait()
。当第三个线程调用wait()
时,所有三个线程将继续执行。
boost::barrier barrier(3);
void thread_function()
{
read_data();
barrier.wait(); // Threads will block here until all three are ready.
process_data();
}
如果你只想让一个线程处理数据,可以查看wait()
的返回值;该函数只会为屏障处的线程之一返回 true。
关于c++ - qt中的线程同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21865009/