while创建多线程如何用pthread detach回收子线程
时间: 2023-06-17 11:08:05 浏览: 164
C语言多线程编程:使用POSIX线程(pthread)
使用 `pthread_detach()` 函数可以将一个线程标记为 detach 状态,这样当线程退出时,线程的资源会自动被回收,而不需要调用 `pthread_join()` 函数等待其它线程回收资源。
下面是一个示例代码片段,演示如何创建一个子线程并将其标记为 detach 状态:
```c
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void *thread_func(void *arg) {
printf("Child thread running\n");
sleep(3);
printf("Child thread exiting\n");
return NULL;
}
int main() {
pthread_t thread_id;
int ret;
// 创建子线程
ret = pthread_create(&thread_id, NULL, thread_func, NULL);
if (ret != 0) {
fprintf(stderr, "Error: pthread_create() failed\n");
exit(EXIT_FAILURE);
}
// 将子线程标记为 detach 状态
ret = pthread_detach(thread_id);
if (ret != 0) {
fprintf(stderr, "Error: pthread_detach() failed\n");
exit(EXIT_FAILURE);
}
printf("Main thread exiting\n");
return 0;
}
```
在上面的示例中,我们首先创建一个子线程,然后使用 `pthread_detach()` 函数将其标记为 detach 状态。最后,为了等待子线程执行完毕,主线程会休眠 3 秒后退出。
需要注意的是,一旦将线程标记为 detach 状态后,就无法再使用 `pthread_join()` 函数回收其资源。如果确实需要回收,可以使用 `pthread_cancel()` 函数向线程发送取消请求,但是需要线程本身支持取消操作。
阅读全文