qt - Cpp中的QThread屏障机制
问题描述
如何在 Qthread run() 方法中定义障碍点以进行同步。我的 run 方法代码由两个阶段组成,所有线程必须到达第一阶段的末尾才能通过第二阶段。
void ThreadClass::run()
{
barrier// All of the thread must reach this point before passing below the line
}
解决方案
从我的头顶::
1:创建一个互斥体,然后在创建线程池之前将其锁定在你的 main() 中。创建线程池,让它们运行,你的屏障应该是这样的。
perThreadReachedThisPointFlag = 1;
mutexCreatedByMain.lock();
mutexCreatedByMain.unlock();
在您的 main() 中,监视线程池。如果您观察到(不要忘记内存栅栏)池中的所有线程都设置了 perThreadReachedThisPointFlag,则执行 mutexCreatedByMain.unlock(); 在你的 main() 上。
所有线程都在等待锁定提到的互斥锁,然后你让它们走。所有这些都将锁定然后解锁互斥锁。
2:另一种方法是使用 pthread 的 conditionVariable 和 conditionSignal 功能,但我不知道 Windows 的替代品。
推荐阅读
- typescript - 扩展多个接口的更好方法
- java - 在 Junit 5 中使用 Mockito 静态模拟时如何抛出 InterruptedException?
- apache - 子域HTTP和HTTPS去不同的目录,Apache2.4
- python - 如何将matplotlib图形转换为二进制类型
- python-3.x - 如何修复“列表索引超出范围错误”
- python - 在索引页上将数据从 c# 打印到烧瓶
- android - 如何在 Chrome、Android 上的 Video.js 中设置 HLS (m3u8) 的初始时间
- java - log4j2 spring boot 查找无法从 application.properties 读取属性
- xml - 使用函数“parse-json”进行转换会返回错误
- cypress - Cypress-cucumber - 如何将步骤存储在与功能相同的目录中