- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有一个运行某些操作的 OpenMP 2.0 for 循环:
#pragma omp parallel for schedule(static)
for (int i = 0; i < lim; ++i)
{
// do something thread-safe
}
threadSafeFunc();
unSafeFunc();
仿函数 threadSafeFunc
是完全线程安全的,因此我不想在所有这些迭代完成后连续运行它,而是希望获得第一个完成任务分配的线程,从 OpenMP 循环到开始处理它,然后让所有线程在串行执行 unSafeFunc
之前等待。
我该怎么做?
最佳答案
这可能是您特定问题的解决方案:
#pragma omp parallel
{ // #1
#pragma omp for schedule(static) nowait
for (int i = 0; i < lim; ++i) // #2
{
// do something thread-safe
} // No implied barrier bue to the nowait clause
#pragma omp single
{ // #3
threadSafeFunc();
} // Implied barrier
} // End of parallel region
unSafeFunc();
想法很简单:首先在#1
中打开一个parallel
区域。在这个平行区域内,您使用两个工作共享结构:
#2
处的循环结构#3
处的单个结构循环构造(standard 的第 2.7.1 节)有一个 nowait
子句,用于删除循环结束时的隐式屏障。然后是 single
构造(第 2.7.3 节):
... specifies that the associated structured block is executed by only one of the threads in the team (not necessarily the master thread), in the context of its implicit task. The other threads in the team, which do not execute the block, wait at an implicit barrier at the end of the single ...
这两个构造的组合确保了第一个在循环中完成其工作的线程将进入single
构造并执行threadSafeFunc()
。然后所有线程将在隐含的障碍处同步并加入 master
线程。此时只有 master
线程会继续执行 unSafeFunc()
。
关于c++ - 如何在剩余线程完成工作时处理任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21422065/
我正在运行一个带有 while 约束的 SQL 查询,其中包含一些“id”。例如: SELECT table.id FROM TableOne table WHERE table.id IN (1,
我正在寻找在替换其中一个元素后打印元素列表的最正确方法。我可以按如下方式做,但显然很困惑。 #!/usr/bin/python import sys file = open(sys.argv[1])
这个问题在这里已经有了答案: How wide is the default `` margin? (4 个答案) How do I remove the top margin in a web
当我尝试使用命令安装 rvm 时::(I am Using UBUNTU 12.04 LTS) curl -L https://get.rvm.io | bash -s 当我尝试与简单用户相同的命令时
我使用 GOPro 工作人员 6 个月前发送给我的命令,通过终端(在 Gopro 网络上)使用 Gopro Hero3 拍摄照片/视频。有效。但是,在过去的一个月里,我一直在尝试再次执行此操作,并且不
尽管知道我不应该关闭应用程序按钮,但我仍然这样做。完成所有 Activity 后,我调用 finish() 方法,它们调用析构函数和所有内容。用户的行为也是正确的。但我想知道为什么还有 5 个打开的线
当我在 Rest Controller 中的类级别启用 @Validated spring 注释时,会生成 2 个验证上下文(每个验证上下文都有不同的前缀)。 @Validated 注释是必需的,因为
在旧的 API 中,剩余的允许容量显然作为 X-Ratelimit-Remaining 返回HTTP header 。 然而,current version's documentation对此一无所获
我一直在使用 Service Fabric 一段时间,成功构建、部署和测试了多个服务,但我刚刚完成构建的服务在部署时失败(请参阅下面的错误)。在诊断中,我尝试使用 VS 模板(没有代码更改)创建和部署
这个问题在这里已经有了答案: 关闭 12 年前。 Possible Duplicate: Progress unit in ProgressDialog 如何覆盖进度条进度消息,即 61/100 到
我正在用 Objective-C (Cocoa) 编写命令行实用程序的前端。我需要解析输出以检查不同类型的消息。有两种基本类型;信息消息和下载状态消息。信息消息始终以以下内容之一开头:INFO:、WA
我是一名优秀的程序员,十分优秀!