我想制作并行线程。示例:我的输出如下: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,但我该如何解决?
答案 0 :(得分:4)
您想要在启动所有线程后加入该线程。你的代码目前所做的是启动一个线程,然后加入,然后启动下一个线程。这实际上只是让它们按顺序运行。
但是,输出可能不会改变,因为这完全取决于首先获得锁定的任何线程。
答案 1 :(得分:0)
是的,连接阻止任何线程同时运行,因为它阻止主线程继续创建其他线程,直到刚刚创建的线程终止。删除连接,它们应该同时运行。 (尽管可能仍然不平行,具体取决于您的系统。)
但是,您的输出可能没有任何差异。