pthread_cancel 示例
时间: 2023-07-01 13:29:15 浏览: 63
pthreads使用例子
下面是一个使用pthread_cancel的简单示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
void* thread_func(void* arg) {
int i = 0;
while(1) {
printf("thread_func: i=%d\n", i++);
sleep(1);
}
return NULL;
}
int main() {
pthread_t thread;
int ret;
ret = pthread_create(&thread, NULL, thread_func, NULL);
if(ret != 0) {
printf("pthread_create failed\n");
exit(-1);
}
sleep(5);
ret = pthread_cancel(thread);
if(ret != 0) {
printf("pthread_cancel failed\n");
exit(-1);
}
ret = pthread_join(thread, NULL);
if(ret != 0) {
printf("pthread_join failed\n");
exit(-1);
}
printf("main thread exit\n");
return 0;
}
```
在该示例中,主线程创建了一个新线程,并在5秒后向该线程发送取消请求。在新线程中,通过while循环不断地输出计数器的值。当新线程收到取消请求时,通过返回NULL来正常结束线程。最后,主线程通过pthread_join函数等待新线程的结束,并回收线程占用的资源。
需要注意的是,由于线程在收到取消请求时可能会处于不可取消状态,因此需要在适当的位置设置取消点,以便在收到取消请求时进行清理操作。在本例中,由于新线程的while循环中没有设置取消点,因此在收到取消请求时,新线程可能会处于不可取消状态,从而导致程序异常终止。为了避免这种情况,可以使用pthread_setcanceltype和pthread_setcancelstate函数来设置线程的取消类型和取消状态,并在适当的位置设置取消点。
阅读全文