我已将线程数设置为4。
我的问题是我在以下代码中看到了顺序类型行为。我希望看到所有线程以随机方式打印它们的id,这就是pthread实现的行为方式。
#include <omp.h>
#include <stdio.h>
#include <stdlib.h>
#define CHUNKSIZE 5
#define N 1000
int main (int argc, char *argv[])
{
int nthreads, tid, i, chunk;
float a[N], b[N], c[N];
/* Some initializations */
for (i=0; i < N; i++)
a[i] = b[i] = i * 1.0;
chunk = CHUNKSIZE;
#pragma omp parallel for schedule(static,10) shared(a,b,c) private(i,tid)
for (i=0; i<N; i++)
{
tid = omp_get_thread_num();
c[i] = a[i] + b[i];
printf("Thread %d: c[%d]= %f\n",tid,i,c[i]);
}
}
部分输出:
Thread 2: c[949]= 1898.000000
Thread 2: c[980]= 1960.000000
Thread 2: c[981]= 1962.000000
Thread 2: c[982]= 1964.000000
Thread 2: c[983]= 1966.000000
Thread 2: c[984]= 1968.000000
Thread 2: c[985]= 1970.000000
Thread 2: c[986]= 1972.000000
Thread 2: c[987]= 1974.000000
Thread 2: c[988]= 1976.000000
Thread 2: c[989]= 1978.000000
Thread 0: c[1]= 2.000000
Thread 0: c[2]= 4.000000
Thread 0: c[3]= 6.000000
Thread 0: c[4]= 8.000000
Thread 0: c[5]= 10.000000
Thread 0: c[6]= 12.000000
Thread 0: c[7]= 14.000000
Thread 0: c[8]= 16.000000
Thread 0: c[9]= 18.000000
Thread 0: c[40]= 80.000000
Thread 0: c[41]= 82.000000
Thread 0: c[42]= 84.000000
Thread 0: c[43]= 86.000000
Thread 0: c[44]= 88.000000
Thread 0: c[45]= 90.000000
Thread 0: c[46]= 92.000000
Thread 0: c[47]= 94.000000
Thread 0: c[48]= 96.000000
Thread 0: c[49]= 98.000000
Thread 0: c[80]= 160.000000
Thread 0: c[81]= 162.000000
Thread 0: c[82]= 164.000000
Thread 0: c[83]= 166.000000
Thread 0: c[84]= 168.000000
Thread 0: c[85]= 170.000000
Thread 0: c[86]= 172.000000
Thread 0: c[87]= 174.000000
Thread 0: c[88]= 176.000000
Thread 0: c[89]= 178.000000
Thread 0: c[120]= 240.000000
Thread 0: c[121]= 242.000000
Thread 0: c[122]= 244.000000
Thread 0: c[123]= 246.000000
答案 0 :(得分:0)
你的机器是单核吗?如果是这样,线程可能会顺序生成,并且您的操作系统使用循环调度来执行每个线程。您只会在多核计算机上看到交错的线程。
编辑:
根据我在下面的评论,我认为你想看到的是线程执行的随机性,根据你的操作系统调度程序,情况并非如此。
在单核机器上进行多线程处理并不是很有用。与两个线程的并行可能会给你一个小的性能提升,但是你的回报会减少,而且fork和join的开销会很快降低性能。