pthread_join
函数用于等待一个指定的线程终止。当一个线程调用 pthread_join
来等待另一个线程时,调用线程将阻塞,直到指定的线程完成执行。
函数原型如下:
int pthread_join(pthread_t thread, void **retval);
thread
:要等待的目标线程的标识符。retval
:一个指向指针的指针,用于存储目标线程的返回值。如果不关心返回值,可以传递NULL
。
pthread_join
的主要作用是:
- 等待目标线程的终止:调用线程将一直阻塞,直到目标线程执行完毕。
- 回收目标线程的资源:一旦目标线程完成,它的资源(如线程描述符、栈等)就会被回收。
这个函数是多线程编程中常用的同步机制之一。通过 pthread_join
,主线程可以等待其他线程完成工作,确保线程的协同工作。在等待期间,主线程可以做一些其他的工作,或者直接等待其他线程的终止。此外,通过 pthread_join
获取目标线程的返回值,主线程可以获取到目标线程的执行结果。
下面是一个简单的示例,演示了 pthread_join
的基本用法:
#include <pthread.h>
#include <stdio.h>
void* thread_function(void* arg) {
// 子线程的工作
printf("Child thread is running\n");
return (void*)42; // 返回一个整数值
}
int main() {
pthread_t tid;
int result;
// 创建子线程
pthread_create(&tid, NULL, thread_function, NULL);
// 等待子线程终止,并获取返回值
pthread_join(tid, (void**)&result);
// 打印子线程返回值
printf("Child thread returned: %d\n", result);
return 0;
}
在这个例子中,主线程创建了一个子线程,然后调用 pthread_join
等待子线程的终止,并获取子线程的返回值。这样可以确保主线程在子线程执行完毕后再继续执行。