【发布时间】:2015-08-17 17:26:56
【问题描述】:
我在使用 OpenMP 时遇到了问题。有两个函数需要并行执行。在foo() 中有一个循环应该被stop 中断。如您所见,它是在另一个 OMP 部分中分配的。
代码是:
char stop;
#pragma omp parallel
{
#pragma omp sections
{
#pragma omp section
{
foo(&stop);
}
#pragma omp section
{
bar();
stop = getch();
}
}
}
和
void foo(char *foo)
{
while(*stop != 'q')
{
// do stuff
}
}
现在当我执行该代码时会发生什么:它卡在第一个 (foo()) 部分。更具体地说,在给定的循环中 - 现在是一个无限循环,因为它永远无法切换到 bar 部分,因此永远无法调整中断条件。
现在一个简单的方法是让foo() 部分超时。我搜索了互联网,但找不到任何适用的代码。
有人有想法吗?
感谢您的建议!
【问题讨论】:
-
为什么不在while循环中添加定时条件?
-
源存储在 .dll 中
-
意思是你有一个不能改变的库?
-
正是我的奋斗目标
-
您应该将
foo的参数标记为volatile,以防止编译器优化其使用:void foo (volatile char *stop)。另外,在getch语句之后添加#pragma omp flush(stop)。
标签: c++ parallel-processing timeout scheduled-tasks openmp