C 中的多线程循环



>想知道为什么像这样将 for 循环分成两个线程会使我的性能降低近一倍?我使用的是双核处理器。

正常循环(1.78 秒):

int var;
for (i = 0; i < n; i++)
        for (j=0; j < p; j++){
               var = 0;
               for (k=0; k < m; k++)
                       var = i + k;
        }

分环 (2.53 秒):

pthread_create(&tid[0], NULL, A, NULL);
pthread_create(&tid[1], NULL, B, NULL);
for (i=0; i < 2; i++) pthread_join(tid[i],NULL) == 0;

void * A(void *arg)
{
    int i, j, k, var;
    for (i = 0; i < n/2; i++)
        for (j=0; j < p; j++)
        {
               var = 0;
               for (k=0; k < m; k++)
                    var = i + k;
        }
    pthread_exit(NULL);
}

void * B(void *arg)
{
      int i, j, k, var;
      for (i = n/2; i < n; i++)
            for (j=0; j < p; j++)
            {
                 var = 0;
                 for (k=0; k < m; k++)
                     var = i + k;
            }
      pthread_exit(NULL);
}

我想通了。我使用全局变量(i,j,k,x,y,z等)来迭代循环。我没有在示例中展示这一点,所以你不会知道。这显然增加了大量的开销。现在,它正在与每个线程的局部变量正常工作。

最新更新