Linux_UNIX编程手册-读书笔记-第三十二章(线程:线程取消)

32.1 取消一个线程

函数pthread_cancel()向由thread指定的线程发送一个取消请求
在这里插入图片描述

发出取消请求后,函数会当即返回,不会等待目标线程的退出。

32.2 取消状态及类型

下面两个函数会设定标志,允许线程对取消请求的响应过程加以控制。
在这里插入图片描述
函数pthread_setcancelstate()会将调用线程的取消性状态置为参数state所给定的值。
state:
在这里插入图片描述

32.3 取消点

若将线程的取消性状态和类型分别置为启用和延迟,仅当线程抵达某个取消点时,取消请求才会起作用。取消点既是对由实现定义的一组函数之一加以调用。

下表大部分函数都有能力将线程无期限地阻塞起来。
在这里插入图片描述
看到这里还没看懂取消点到底是个啥???

32.4 线程可取消性的检测

假设线程执行的是一个不含取消点的循环,这时,线程永远也不会响应取消请求。

pthread_testcancel()的目的很简单,就是产生一个取消点。线程如果已有处于挂起状态的取消请求,那么只要调用该函数,线程就会随之终止。
在这里插入图片描述

32.5 清理函数(cleanup handler)

为什么需要清理函数:
在这里插入图片描述

每个线程都可以拥有一个清理函数栈。当线程遭取消时,会沿该栈自顶向下依次执行清理函数,执行完之后,线程终止。

所以就有了下面两个函数:
在这里插入图片描述
这里有一个疑问: 这个函数和atexit有啥区别?

通常,线程如在执行一段特殊代码时遭到取消,才需要执行清理动作。如果线程顺利执行完这段代码而未遭取消,那么就不在需要清理。

SUSv3将这两个函数实现为宏,这意味着配对的这两个函数必须属于同一个语法块。
这句话也不太懂

32.6 异步取消

如果设定线程为可异步取消时,可以在任何时点将其取消,取消动作不会拖延到下一个取消点才执行。在这里插入图片描述
BALABALA一堆又说不能用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值