linux中线程pthread_exit和pthread_cancel区别
时间: 2023-11-30 17:41:10 浏览: 130
Pthread-Primer.rar_pthread_unix primer
pthread_exit和pthread_cancel都可以用于终止线程,但它们之间有一些区别:
1. pthread_exit是线程主动退出,可以在线程的执行函数中调用return语句或pthread_exit函数来退出线程;而pthread_cancel是由其他线程取消目标线程的执行。
2. pthread_exit函数的作用是在线程执行结束时终止线程,而pthread_cancel函数可以在任何时候取消线程的执行。
3. pthread_exit函数的调用会使线程立即退出,而pthread_cancel函数的调用只是向目标线程发送一个取消请求,目标线程可以在取消请求到达时进行处理。
下面是一个简单的例子,演示了如何使用pthread_exit和pthread_cancel函数来终止线程:
```c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
void *thread_func(void *arg)
{
int i;
for (i = 0; i < 5; i++) {
printf("Thread running %d\n", i);
sleep(1);
}
pthread_exit(NULL);
}
int main()
{
pthread_t tid;
int ret;
ret = pthread_create(&tid, NULL, thread_func, NULL);
if (ret != 0) {
printf("Create thread error!\n");
exit(1);
}
sleep(2);
// 使用pthread_cancel函数取消线程
ret = pthread_cancel(tid);
if (ret != 0) {
printf("Cancel thread error!\n");
exit(1);
}
// 等待线程结束
ret = pthread_join(tid, NULL);
if (ret != 0) {
printf("Join thread error!\n");
exit(1);
}
printf("Thread exit!\n");
return 0;
}
```
阅读全文