pthread_join
是 Linux 中用于等待一个或多个线程完成的函数
pthread_join
的主要作用如下:
确保主线程等待子线程完成:在多线程程序中,主线程可能需要在其他线程完成任务之后才能继续执行。通过使用 pthread_join
,主线程可以阻塞自己,直到子线程完成。
获取子线程的返回值:pthread_join
可以用来获取子线程的返回值。当子线程完成时,pthread_join
会将子线程的返回值存储在一个参数中,以便主线程使用。
避免死锁:如果不使用 pthread_join
等待子线程完成,主线程可能会在子线程还在执行时结束,导致子线程成为孤儿进程。这可能导致资源泄漏和其他问题。使用 pthread_join
可以确保主线程等待子线程完成,从而避免死锁。
下面是一个简单的示例:
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
void *print_hello(void *arg) {
printf("Hello from thread %ld\n", (long)arg);
pthread_exit(NULL);
}
int main() {
pthread_t threads[5];
int rc;
long t;
for (t = 0; t < 5; t++) {
printf("In main: creating thread %ld\n", t);
rc = pthread_create(&threads[t], NULL, print_hello, (void *)t);
if (rc) {
printf("ERROR: return code from pthread_create() is %d\n", rc);
exit(-1);
}
}
for (t = 0; t < 5; t++) {
printf("In main: joining thread %ld\n", t);
rc = pthread_join(threads[t], NULL);
if (rc) {
printf("ERROR: return code from pthread_join() is %d\n", rc);
exit(-1);
}
}
pthread_exit(NULL);
}
在这个示例中,主线程创建了 5 个子线程,每个子线程打印一条消息。然后,主线程使用 pthread_join
等待每个子线程完成。最后,主线程结束。