pthread_join函数用法
时间: 2023-05-21 13:03:13 浏览: 233
pthread_join函数用于等待一个线程结束并回收其资源。其函数原型为:
int pthread_join(pthread_t thread, void **retval);
其中,thread参数为要等待的线程的标识符,retval参数用于获取线程的返回值。如果线程已经结束,pthread_join函数会立即返回;否则,它会一直阻塞,直到线程结束为止。
相关问题
pthread_join的用法
pthread_join函数用于等待一个线程的结束,并获取该线程的返回值。其函数原型如下:
```c
int pthread_join(pthread_t thread, void **retval);
```
其中,`thread`参数是要等待的线程的标识符,`retval`参数是一个指向指针的指针,用于存储线程的返回值。
当调用pthread_join函数时,当前线程会被阻塞,直到指定的线程结束。如果线程已经结束,那么pthread_join会立即返回。当线程结束后,其返回值会被存储在`retval`指向的内存中。
需要注意的是,如果不关心线程的返回值,可以将`retval`参数设置为NULL。
以下是pthread_join函数的使用示例:
```c
#include <stdio.h>
#include <pthread.h>
void *thread_func(void *arg) {
int *num = (int *)arg;
printf("子线程执行,参数为:%d\n", *num);
*num = 100; // 修改参数值
pthread_exit((void *)num); // 返回参数地址
}
int main() {
pthread_t tid;
int num = 10;
pthread_create(&tid, NULL, thread_func, (void *)&num);
printf("主线程执行\n");
void *ret_val;
pthread_join(tid, &ret_val);
printf("子线程返回值:%d\n", *(int *)ret_val);
printf("修改后的参数值:%d\n", num);
return 0;
}
```
pthread_create()函数和pthread_join()函数的用法
pthread_create()函数和pthread_join()函数都是用于多线程编程的函数。
pthread_create()函数用于创建一个新的线程,其原型如下:
```c
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);
```
其中,第一个参数thread是指向线程标识符的指针,第二个参数attr是用来设置线程属性的,第三个参数start_routine是线程运行函数的起始地址,最后一个参数arg是运行函数的参数。
pthread_join()函数用于等待一个线程的结束,其原型如下:
```c
int pthread_join(pthread_t thread, void **retval);
```
其中,第一个参数thread是要等待的线程标识符,第二个参数retval是一个指向指针的指针,用来存储线程的返回值。
下面是两个伪代码用例,分别演示了pthread_create()函数和pthread_join()函数的用法:
1.使用pthread_create()函数创建一个新线程,并在新线程中运行func()函数:
```c
#include <pthread.h>
#include <stdio.h>
void func(void) {
pthread_detach(pthread_self());
pthread_exit(0);
}
int main(void) {
pthread_t sp = -1;
pthread_create(&sp, NULL, func, NULL);
return 0;}
```
2.使用pthread_create()函数创建一个新线程,并使用pthread_join()函数等待该线程结束:
```c
#include <pthread.h>
#include <stdio.h>
void func(void) {
return;
}
int main(void) {
pthread_t sp = -1;
pthread_create(&sp, NULL, func, NULL);
pthread_join(sp, NULL);
return 0;
}
```
阅读全文