- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
以下代码应该非常简单,但在尝试使用嵌套的 OpenMP 代码在线程上执行 .join() 时,似乎最终陷入了挂起状态。使用 GCC 编译器 4.7.2 x64 和来自 http://sourceforge.net/projects/mingwbuilds 的 pthreads使用 g++ threadexample.cpp -Wall -std=c++11 -fopenmp -o threads
// threadexample.cpp
#include <iostream>
#include <thread>
#include <omp.h>
using namespace std;
void hello(int a) {
#pragma omp parallel for
for (int i=0;i<5;++i) {
#pragma omp critical
cout << "Hello from " << a << "! " << "OMP thread iter " << i << endl;
}
cout << "About to return from hello function" << endl;
}
int main (int argc, char ** argv) {
thread t1(hello, 1); //fork
cout << "t1 away!" << endl;
thread t2(hello, 2);
cout << "t2 away!" << endl;
t1.join(); //join
cout << "thread 1 joined" << endl;
t2.join();
cout << "thread 2 joined" << endl;
return 0;
}
最佳答案
混合使用 OpenMP 和任何其他线程库(pthreads
、Win32 线程等)可能不是一个好主意。 OpenMP 运行时的编写可能假设它完全控制线程并且可能不支持同时运行的parallel
区域(例如,它可能使用像信号量这样的全局变量来控制线程池) .
实现此目的的更好的纯 OpenMP 方法是:
#include <iostream>
#include <omp.h>
using namespace std;
void hello(int a) {
#pragma omp parallel for
for (int i=0;i<5;++i) {
#pragma omp critical
cout << "Hello from " << a << "! " << "OMP thread iter " << i << endl;
}
cout << "About to return from hello function" << endl;
}
int main (int argc, char ** argv) {
omp_set_nested(1);
#pragma omp parallel sections num_threads(2)
{
#pragma omp section
{
hello(1);
}
#pragma omp section
{
hello(2);
}
}
return 0;
}
需要调用 omp_set_nested()
以启用默认情况下禁用的嵌套并行性。
关于c++ - 为什么在使用嵌套的 OpenMP pragma 时 c++11 线程变得不可连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13197510/
我在 android 代码中使用 asmack XMPP。我可以正常登录 XMPP 服务器,但是当我尝试创建新用户时出现问题。我想要实现的是: 以管理员身份登录。 创建一个新用户。 从管理员注销。 以
这是我的标记页面,其中有一个按钮可以从数据库中搜索数据并显示在网格中 这是我背后的代码 if (!IsPostBack) { LblInfo.Text = "Page Load
当我多次将相同的 float 值插入到我的集合中时,本应花费恒定时间的 x in s 检查变得非常慢。为什么? 时序x in s的输出: 0.06 microseconds 0.09 mi
我有一个小型聊天客户端,可以将所有历史记录存储在 sqlite 数据库中。当用户单击我的应用程序中的 history 选项卡时,我的应用程序会获取所有相关历史记录并将其显示在 QWebView 中。我
我是一名优秀的程序员,十分优秀!