Cpp中的QThread屏障机制
Posted
技术标签:
【中文标题】Cpp中的QThread屏障机制【英文标题】:QThread Barrier mechanizm in Cpp 【发布时间】:2020-09-20 14:00:31 【问题描述】:如何在 Qthread run() 方法中定义障碍点以进行同步。 我的 run 方法代码由两个阶段组成,所有线程必须到达第一阶段的末尾才能通过第二阶段。
void ThreadClass::run()
barrier// All of the thread must reach this point before passing below the line
【问题讨论】:
我正在使用线程池并启动 4 个线程。每个线程对数组列表的特殊部分执行相同的操作。它必须等待所有其他线程都到达同一点。然后每个线程对它们执行数组列表的特殊部分的其他操作。 【参考方案1】:从我的头顶::
1:创建一个互斥体,然后在创建线程池之前将其锁定在 main() 中。创建线程池,让它们运行,你的屏障应该是这样的。
perThreadReachedThisPointFlag = 1;
mutexCreatedByMain.lock();
mutexCreatedByMain.unlock();
在你的 main() 中,监控线程池。如果您观察到(不要忘记内存栅栏)池中的所有线程都设置了 perThreadReachedThisPointFlag,则执行 mutexCreatedByMain.unlock();在你的 main() 上。
所有线程都在等待锁定提到的互斥体,然后你让它们离开。它们都将锁定然后解锁互斥体。
2:另一种方法是使用 pthread 的 conditionVariable 和 conditionSignal 功能,但我不知道 Windows 的替代品。
【讨论】:
以上是关于Cpp中的QThread屏障机制的主要内容,如果未能解决你的问题,请参考以下文章
QThread的源码(直接搜索"thread.cpp"即可,或者在github里搜)
通过 Signal/Slot 机制将 QString 传递给 QThread