【发布时间】:2026-01-14 10:35:01
【问题描述】:
我有以下一段代码(注意:这是为了帮助我理解这个概念,所以它是一个示例代码,而不是我打算运行的东西)
List ml; //my_list
Element *e;
#pragma omp parallel
#pragma omp single
{
for(e=ml->first;e;e=e->next)
#pragma omp task
process(e);//random function
}
有人提到 e 将始终具有相同的值,我试图思考为什么会这样以及值将是什么。
我的尝试/推理:
e 的值在pragma omp single 内部发生变化,这些变化不会在任务内部执行(如果我没记错的话,除非我使用类似 firstprivate(e) 的东西,否则单个区域的值不会被带到任务内部,此外,它将采用的值将是随机的,因为我们没有将 e 初始化为单个和并行 omp 区域之外的任何变量,并且 e 将作为一个值,如果我们已经在外部初始化为一个值 x 例如然后e 永远是 x
任何帮助纠正或验证我的推理将不胜感激。
【问题讨论】:
标签: c multithreading openmp