0
如何确保3段代码与OpenMP同时执行?在以下玩具问题中,部分A & B生成一些数据,部分C轮询数据并对其执行操作。3平行区域
int main(int argc, char* argv[])
{
int G = -1,S = -1;
#pragma omp parallel sections default(none) shared(G,S,cout)
{
// Section A
#pragma omp section
{
for(;;)
{
G = G_Generator();
if(G == 0) break;
}
}
// Section B
#pragma omp section
{
for(;;)
{
S = S_Generator();
if(S == 0) break;
}
}
// Section C
#pragma omp section
{
for(;;)
{
if(G == 1 || S == 1) Do_1();
if(G == 2 || S == 2) Do_2();
if(G == 0 || S == 0) break;
}
}
}
return 0;
}
这不起作用,我无法调试它。轮询部分C可能“错过”1或2的G
或S
值吗?代码似乎没有达到预期的效果---这是在OpenMP中编写代码的正确方法吗?我只有以前并行循环。
我想我缺少'#pragma omp flush' – Jacob 2011-03-09 03:48:28
您可能还想看看最近的这个讨论:http://stackoverflow.com/questions/5110816/pragma-omp-flush-to-make-exchange-线程间数据使用flush不像看起来那么容易。 – ejd 2011-03-09 13:11:47