4

我想做并行线程。示例:我的输出如下:thread1 thread3 thread4 thread2 ... 在 main 中:

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,但我该如何解决呢?

4

2 回答 2

4

您想在启动所有线程后加入线程。您的代码当前所做的是启动一个线程,然后加入,然后启动下一个线程。这本质上只是让它们按顺序运行。

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

于 2014-12-16T16:04:59.880 回答
0

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

但是,您可能看不到输出有任何差异。

于 2014-12-16T16:05:06.523 回答