默认情况下,循环变量是私有的。假设我们有一个线程这个循环头:循环开始执行由OpenMP中的调度程序处理循环变量
#pragma omp parallel num_threads(4)
{
#pragma omp parallel for schedule(static,1)
for(i=0; i<40; i+=2) {
//...
}
}
之前,静态调度可能会分配迭代如下:
主题1:迭代0,4,8, 12,16
线程2:迭代1,5,9,13,17
线程3:迭代2,6,10,14,18
线程4:迭代3,6,12,15,19
我不理解线程3是如何知道的i
在其第三次迭代的正确值(如果循环顺序执行,这将是第10次迭代)。 i
是私人的,所以每个线程都有自己的副本并增加i
。同样,i
的值必须以某种方式共享。这个怎么用?
[你见过?](https://msdn.microsoft.com/en-us/library/x5aw0hdf.aspx) – Kenney