c++ - qt中的线程同步

标签 c++ multithreading qt boost qthread

我有一个程序,有 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/

相关文章:

c++ - C++中具有虚拟继承的类大小

c++ - 每当动态分配内存时,您是否总是必须检查 bad_alloc?

c++ - 如何从线程中获取返回值?

c++ - 如何在 Main() 之外创建和显示 MainWindow?

c++ - 使用 QQuickView 或 QQmlApplicationEngine 在 ApplicationWindow 之间切换页面

c++ - 在 vector 和 map 上执行 erase(iterator) 时观察到的不同行为

android - 如何通过 Android NDK 编译 C++ 项目

python-3.x - 多线程 celery worker 的任务划分

c - 单步执行直到退出函数 gdb

qt - 如何更改 QSlider 上 handle 的颜色