线程取消,取消点

线程取消


https://www.cnblogs.com/tianzeng/p/9195091.html

  • pthread_setcancelstate: 对于cancel信号,线程有两种方法: 忽略,和响应。默认是响应
  • pthread_setcanceltype: 接收到cancel信号,线程有两种处理类型: 立即响应 和 延迟响应(在最近的取消点响应),默认是延迟响应

取消点

  • pthread_testcancel:可以用该函数设置取消点
  • 根据POSIX标准,pthread_join()、pthread_testcancel()、pthread_cond_wait()、pthread_cond_timedwait()、sem_wait()、sigwait()等函数以及read()、write()等会引起阻塞的系统调用都是取消点

取消

当一段代码被取消时需要恢复一些状态,必须使用清除处理器,当线程在等待一个条件变量时被取消,他将被唤醒,并保持互斥量的加锁状态,在线程终止前,通常需要恢复不变量,总是需要释放互斥来量。

可以把每一个线程考虑为有一个活动的清除处理函数的栈,用pthread_cleanup_push将清除处理函数加入到栈,pthread_cleanup_pop删除最近添加的处理函数,当线程被取消或调用pthread_exit时,pthread从最近增加清除处理函数开始,依次调用各个活动的清除处理函数。

清除处理函数也可以设计为线程被取消时,也能经常使用清除处理函数,不论取消是否正常完成,当pthread_cleanup_pop以非零值调用时就算线程没被取消,清除处理函数也要被执行

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值