Linux 取消线程代码
时间: 2024-05-28 15:07:31 浏览: 92
在Linux下取消线程有两种方式:pthread_cancel和pthread_kill。
1. pthread_cancel函数:该函数可以用来请求终止目标线程,但是目标线程必须在某些特定点(比如sleep、pthread_join等)才能响应取消请求。同时,目标线程需要事先通过pthread_setcancelstate函数设置是否允许被取消,并通过pthread_setcanceltype函数设置取消动作的类型。
2. pthread_kill函数:该函数可以向目标线程发送一个指定的信号,常用信号包括SIGTERM和SIGKILL。但是,该方式并不能保证目标线程一定能够响应信号并退出,因为信号处理可能会被阻塞或者忽略。
下面是取消线程的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
void *thread_func(void *arg) {
while(1) {
printf("I am running...\n");
sleep(1);
}
return NULL;
}
int main() {
pthread_t tid;
int ret = pthread_create(&tid, NULL, thread_func, NULL);
if(ret != 0) {
perror("pthread_create error");
exit(EXIT_FAILURE);
}
sleep(5);
ret = pthread_cancel(tid);
if(ret != 0) {
perror("pthread_cancel error");
exit(EXIT_FAILURE);
}
ret = pthread_join(tid, NULL);
if(ret != 0) {
perror("pthread_join error");
exit(EXIT_FAILURE);
}
printf("Thread has been cancelled.\n");
return 0;
}
```
阅读全文