鑑於此代碼示例的練習是並行使用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
可以避免嗎?