pthread_join详解
时间: 2023-07-31 13:10:15 浏览: 154
`pthread_join()` 函数用于等待一个线程的结束,并回收该线程的资源。该函数的使用方法如下:
```
#include <pthread.h>
int pthread_join(pthread_t thread, void **retval);
```
函数参数解释如下:
- `thread`:要等待的线程标识符。
- `retval`:用于存储线程的返回值。如果不需要返回值,可以将该参数设置为 `NULL`。
`pthread_join()` 成功返回 0,否则返回错误码。
以下是一个使用 `pthread_join()` 函数的例子:
```
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
void *print_message(void *arg)
{
char *message = (char *)arg;
printf("%s\n", message);
pthread_exit(NULL);
}
int main()
{
pthread_t thread_id;
char *message = "Hello, World!";
int ret = pthread_create(&thread_id, NULL, print_message, (void *)message);
if (ret != 0) {
printf("Failed to create thread.\n");
exit(EXIT_FAILURE);
}
ret = pthread_join(thread_id, NULL);
if (ret != 0) {
printf("Failed to join thread.\n");
exit(EXIT_FAILURE);
}
return 0;
}
```
在上面的例子中,我们创建了一个新线程,该线程执行 `print_message()` 函数。在主线程中,我们调用 `pthread_join()` 函数来等待新线程结束,并释放其资源。由于 `print_message()` 函数没有返回值,我们将 `retval` 参数设置为 `NULL`。
注:如果一个线程在等待期间被 `pthread_cancel()` 函数取消,那么 `pthread_join()` 函数可能会立即返回,并且 `retval` 参数的值是 `PTHREAD_CANCELED`。
阅读全文