qt中的线程同步

bar*_*arp 2 c++ qt multithreading boost qthread

我有一个程序有3个线程.所有这些程序都从不同端口的以太网获取数据.3个线程的数据频率可能不同.但是必须同时处理所有传入的数据.

因此,如果一个数据来自一个线程,它必须等待其他数据到来.我怎么才能得到它?

Col*_*nee 5

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.