首页 > 解决方案 > Cpp中的QThread屏障机制

问题描述

如何在 Qthread run() 方法中定义障碍点以进行同步。我的 run 方法代码由两个阶段组成,所有线程必须到达第一阶段的末尾才能通过第二阶段。

void ThreadClass::run()
{

    barrier// All of the thread must reach this point before passing below the line

}

标签: qtqthreadbarrier

解决方案


从我的头顶::

1:创建一个互斥体,然后在创建线程池之前将其锁定在你的 main() 中。创建线程池,让它们运行,你的屏障应该是这样的。

perThreadReachedThisPointFlag = 1;
mutexCreatedByMain.lock();
mutexCreatedByMain.unlock();

在您的 main() 中,监视线程池。如果您观察到(不要忘记内存栅栏)池中的所有线程都设置了 perThreadReachedThisPointFlag,则执行 mutexCreatedByMain.unlock(); 在你的 main() 上。

所有线程都在等待锁定提到的互斥锁,然后你让它们走。所有这些都将锁定然后解锁互斥锁。

2:另一种方法是使用 pthread 的 conditionVariable 和 conditionSignal 功能,但我不知道 Windows 的替代品。


推荐阅读