pthread_cancel 和 pthread_join 如何搭配使用
时间: 2024-03-30 15:32:09 浏览: 212
线程的退出-C++多线编程
pthread_cancel和pthread_join是Linux多线程编程中常用的两个函数,用于线程的终止和等待线程的结束。
pthread_cancel函数用于取消指定线程的执行,其原型为:
```c
int pthread_cancel(pthread_t thread);
```
该函数会向指定线程发送取消请求,但并不会立即终止线程的执行。被取消的线程需要在适当的时候检查取消请求,并在合适的地方调用pthread_exit函数来终止自己的执行。
pthread_join函数用于等待指定线程的结束,其原型为:
```c
int pthread_join(pthread_t thread, void **retval);
```
该函数会阻塞调用线程,直到指定的线程结束。如果指定线程已经结束,那么该函数会立即返回。通过retval参数可以获取被等待线程的返回值。
搭配使用时,通常的流程是先创建线程,然后在需要的时候调用pthread_cancel函数取消线程的执行,最后使用pthread_join函数等待线程的结束。
以下是一个示例代码:
```c
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
void* thread_func(void* arg) {
printf("Thread started\n");
sleep(5);
printf("Thread finished\n");
pthread_exit(NULL);
}
int main() {
pthread_t thread;
pthread_create(&thread, NULL, thread_func, NULL);
sleep(2);
pthread_cancel(thread);
void* retval;
pthread_join(thread, &retval);
printf("Thread joined\n");
return 0;
}
```
在上述示例中,主线程创建了一个新线程,并在2秒后调用pthread_cancel函数取消该线程的执行。然后使用pthread_join函数等待线程的结束,并打印出"Thread joined"。
阅读全文