线程中的join函数是什么意思
时间: 2023-08-09 08:04:33 浏览: 48
在多线程编程中,`pthread_join` 函数用于等待一个线程的结束,并获取它的返回值(如果有)。该函数的原型如下:
```c
int pthread_join(pthread_t thread, void **retval);
```
`pthread_join` 函数接受两个参数:
1. `thread`:要等待结束的线程标识符(即线程ID)。
2. `retval`:用于存储被等待线程的返回值的指针。
`pthread_join` 函数的作用是阻塞当前线程,直到指定的线程结束。当被等待的线程结束时,`pthread_join` 函数会返回,并将被等待线程的返回值存储在 `retval` 指针指向的地址中。
需要注意的是,通过 `pthread_join` 函数等待的线程必须是可连接的(joinable)。可连接线程可以被其他线程等待和回收资源。如果线程是分离状态(detached),则不能使用 `pthread_join` 函数等待该线程。
使用 `pthread_join` 函数可以确保在主线程退出之前,所有创建的子线程都已经结束。这对于需要等待子线程完成工作并获取结果的情况非常有用。
示例代码中并没有使用 `pthread_join` 函数,因此主线程不会等待新线程结束。这意味着主线程可能会在新线程执行之前就退出,从而导致新线程无法完成工作。如果希望主线程等待新线程结束,可以在主线程中添加如下代码:
```c
ret = pthread_join(tid, NULL);
if (ret) {
printf("join thread err: %s\n", strerror(ret));
exit(1);
}
```
这样,主线程会等待新线程结束,并在新线程结束后继续执行后面的代码。