鉴于此代码示例的练习是并行使用OpenMP的代码使用任务。这是一组项目,我们想要数那些好的。 OpenMP:任务中的竞态条件
int count_good (item_t* item)
{
int n = 0;
while (item) {
if (is_good(item))
n++;
item = item->next;
}
return n;
}
这不完全是家庭作业。这是为了完成考试。我的想法是这样的:
int count_good (item_t* item)
{
int n = 0;
while (item) {
#pragma omp task
{
if (is_good(item))
n++;
}
item = item->next;
}
#pragma omp taskwait
return n;
}
...
int main()
{
...
#pragma omp parallel
{
#pragma omp single
count_good(some_times);
}
}
的问题是n
是单线程的私有变量,但它可以在同一时间将增加不同的任务。这可能会产生竞争状态吗? #pragma omp critical
可以避免吗?