【发布时间】:2020-11-30 18:38:59
【问题描述】:
我正在制作一个利用 GTK 的程序,并在该程序中创建了一个服务器。 GUI 和服务器运行良好。我也可以穿线。 OMP 已编译,我已经用 C 计算的OMP Hello World 对其进行了测试。它可以工作,并且输出显然是随机的。但是,当我按下带有此代码的按钮后尝试并行运行服务器时:
char * ip;
int por;
#pragma omp parallel num_threads(1) private(ip, por)
{
ip = (char *)gtk_entry_get_text(GTK_ENTRY(IP));
por = atoi((char *)gtk_entry_get_text(GTK_ENTRY(port)));
startServer(ip, por);
}
显然包含文件#include <omp.h>。
GTK 做它应该做的事,服务器启动并建立连接。但是它不是并行运行的。我知道这是因为 GUI 变得无响应和冻结。
这是我用来编译它的命令:clang++ -std=c++11 -Xpreprocessor -fopenmp -L/usr/local/opt/llvm/lib httpServerv2.cpp `pkg-config --cflags --libs gtk+-3.0` -lomp
httpServerv2.cpp 是我的 c++ 文件的名称。我必须使用带有标签 -std=c++11 的 clang++,这样线程才能工作。哪个有效。其余标签用于 gtk 和 openmp。我开始的方式有问题吗?因为它不是并行运行的。
更新
所以我发现它是并行运行的,而不是我认为应该的方式。我认为会发生的是程序只会调用 omp 并行,然后程序的其余部分将能够继续运行,而我想要并行运行的程序,在这种情况下,我的服务器,只是运行另一个CPU。我没有意识到的是,在您调用并行程序之后,它实际上会等待进程完成,然后代码才能继续。有没有办法让程序不等待进程完成?
类似于线程模块的东西,用于线程分离,仅用于 OMP。
【问题讨论】: