线程没有并行运行

时间:2014-12-16 16:00:40

标签: c multithreading pthreads pthread-join

我想制作并行线程。示例:我的输出如下:thread1 thread3 thread4 thread2 ... 主要:

pthread_t tid;
int n=4;
int i;
for(i=n;i>0;i--){
    if(pthread_create(&tid,NULL,thread_routine,&i)){
        perror("ERROR");
    }
    pthread_join(tid,NULL);
}

我的功能(例程)是:

void *thread_routine(void* args){
    pthread_mutex_lock(&some);
    int *p=(int*) args;
    printf("thread%d ",*p);
    pthread_mutex_unlock(&some);
}

我总是得到不平行的结果:thread1 thread2 thread3 thread4。我希望这些线程在同一时间运行 - 并行。也许问题是位置pthread_join,但我该如何解决?

2 个答案:

答案 0 :(得分:4)

您想要在启动所有线程后加入该线程。你的代码目前所做的是启动一个线程,然后加入,然后启动下一个线程。这实际上只是让它们按顺序运行。

但是,输出可能不会改变,因为这完全取决于首先获得锁定的任何线程。

答案 1 :(得分:0)

是的,连接阻止任何线程同时运行,因为它阻止主线程继续创建其他线程,直到刚刚创建的线程终止。删除连接,它们应该同时运行。 (尽管可能仍然不平行,具体取决于您的系统。)

但是,您的输出可能没有任何差异。