我在主要的
中看过如下的工作示例pthread_t sa[12];
for(i=0;i<12;i++)
pthread_create(&sa[i],NULL,&matrix_mult,NULL);
for(i=0;i<12;i++)
{ if(sa[i]!=(int)NULL)
{ pthread_join(sa[i],NULL);
}
}
当所有pthreads终止时,这是否意味着主要目的? 实际上,我正在编写一个代码,其中sa [3]在sa [0]之前结束 所以我添加了
pthread_join(sa[0],NULL);
在sa [3]的函数结尾 希望sa [3]仅在sa [0]结束后终止。 它没有发生。 我在哪里想错了?
答案 0 :(得分:2)
当所有pthreads终止时,这是否意味着主要目的?
是
实际上,我正在编写一个代码,其中sa [3]在sa [0]
之前结束
这当然是可能的。但主线程等待s [0]。 s [1],..等等。这并不意味着,当主等待s [0]时,s [3]无法完成执行。
在sa [3]的函数结尾处希望sa [3]仅在sa [0]结束后终止。它没有发生。
绝对没有关于哪些线程首先完成执行或最后执行等的命令。任何线程都可以随时完成执行。 pthread_join()在main中调用的内容是主线程在继续之前等待所有线程的完成。
当主线程在线程s[x]
(pthread(s[x], NULL);
)上等待时,线程s[y]
完成执行,然后主线程仍将继续等待s[x]
。在主线程调用pthread_join(s[y], NULL);
,pthread_join()
的某个时刻
将立即返回 ,因为线程s[y]
已经完成执行。
简而言之,pthread_join()调用不确保任何类型的线程执行顺序。它只是挂起调用线程,直到它调用的线程返回(完成执行)。