#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
//取消三要素:取消状态、取消点(函数)、取消方式
//1.取消点
//如:sleep等大多数函数
//2.设置取消状态函数
//pthread_setcancelstate(PTHERAD_CANCEL_DISABLE,NULL);//不可取消状态
//pthread_setcancelstate(PTHERAD_CANCEL_ENABLE,NULL);//可以取消
//3.设置取消方式函数
//pthread_setcanceltype(PTHERAD_CANCEL_ASYNCHRONOUS,NULL);//取消方式为立即取消
//pthread_setcanceltype(PTHERAD_CANCEL_DEFERRED,NULL);//取消方式为不立即取消
//例子1:
// 默认不设置取消状态 不设置取消方式,设置有取消点(函数)
//结果线程可以被取消,正常退出
// void *callback(void *arg)
// {
// while(1)
// {
// //这是一个取消点
// sleep(1);
// }
// pthread_exit((void *)99);
// }
//例子2:
//默认不设置取消状态 不设置取消方式、无取消点(函数)
//结果线程不可以被取消
// void *callback(void *arg)
// {
// while(1)
// {
// //这是一个取消点,将其注释
// //sleep(1);
// }
// pthread_exit((void *)99);
// }
//例子3
//默认取消状态,设置取消方式、无取消点(函数)
// void *callback(void *arg)
// {
// //设置取消方式为立即取消,可以取消
// //pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS,NULL);//取消方式为立即取消
// //不立刻取消,不能取消
// //pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED,NULL);//取消方式为不立即取消
// while(1)
// {
// //这是一个取消点,将其注释
// //sleep(1);
// }
// pthread_exit((void *)99);
// }
//例子4
//设置取消状态,默认取消方式
void *callback(void *arg)
{
//设置为不可取消状态,设置有取消点,线程也不可取消
//pthread_setcancelstate(PTHREAD_CANCEL_DISABLE,NULL);//不可取消状态
//设置为可取消状态,设置有取消点,线程可取消
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,NULL);//可以取消
while(1)
{
//这是一个取消点
sleep(1);
}
pthread_exit((void *)99);
}
//线程能被取消
void test01()
{
//线程的创建
pthread_t pth;
pthread_create(&pth,NULL,callback,NULL);
sleep(3);
//取消线程
pthread_cancel(pth);
//线程等待回收,带阻塞
int num=0;
pthread_join(pth,(void **)&num);
printf("子线程已经退出%d\n",num);
}
int main()
{
test01();
return 0;
}
02 线程的取消
最新推荐文章于 2024-03-13 01:12:26 发布