12.7 Cancal选项

还有两个线程属性并没有包含在pthread_attr_t结构中,它们是cancelability state以及cancelability type。这两个属性影响了线程对于函数调用pthread_cancel的相应行为。(11.5节)

cancelability state属性可以取值PTHREAD_CANCEL_ENABLE或者是PTHREAD_CANCEL_DISABLE,线程可以调用函数pthread_setcancelstate修改其cancelbility state.

  1. #include <pthread.h>
  2. int pthread_setcancelstate(int state, int *oldstate);
  3. Return: 0 if OK, error number on failure.

该函数是一个原子操作,能够将当前的cancelability state设置为state,并将之前的cancelability state存储在oldstate指针所指位置。

在11.5节中提到,函数pthread_cancel并不会等待线程终止,在默认情况下,线程将会在canellation请求发出以后继续运行,直到线程到达一个cancellation point,所谓的cancellation point 是指会检查线程线程时候已经被取消了的地方,如果线程被取消了,那么就会相应请求,POSIX.1保证了cancellation point将会在线程调用如下函数的时候出现;

线程启动的时候,其cancelability state的默认值是PTHREAD_CANCEL_ENABLE,当state被设置成PTHREAD_CANCEL_DISABLE的时候,对于函数pthread_cancel的调用并不会终止线程,取而代之的是,cancellation请求将会一直处于挂起状态,当线程状态再一次被使能的时候,线程就会在接下来的cancellation point响应挂起状态的cancellation请求。

除了图12.14列出的函数之外,POSIX.1还指出,图12.15中列出的函数是可选的cancellation points.

如果你的应用程序在很长一段时间内都没有调用图12.14以及图12.15中的函数的话,你可以调用函数pthread_testcancel来增加你自己的cancellation point到程序中。

  1. #include <pthread.h>
  2. void pthread_testcancel(void);

当你调用函数pthread_testcancel的时候,如果cancellation请求处于挂起状态,并且如果cancellation没有被不使能的话,线程就会被取消,当取消不使能的时候,函数pthread_testcancel并不会由任何影响。

我们已经描述的默认的cancellation type是deferred cancellation(延期取消),即是说,在调用函数pthread_cancel之后,实际的取消动作在线程到达cancellation point之前并不会出现,我们可以使用函数pthread_setcanceltype来修改取消类型.

  1. #include <pthread.h>
  2. int pthread_setcanceltype(int type, int *oldtype);
  3. Returns: 0 if OK, error number on failure.

可以设置的类型由两种,PTHREAD_CANCEL_DEFERRED或者是PTHREAD_CANCEL_ASYNCHRONOUS,并且返回之前的类型到指针所指的内存中。

异步取消与延期取消不同,异步取消可以在任意时间点取消,而不必等到cancellation point.

来自为知笔记(Wiz)

时间: 2025-01-06 01:31:20

12.7 Cancal选项的相关文章

12.6 实现选项的计算表达式

在 12.4 节,我们用选项值作为示例,介绍了用 LINQ 查询和 F# 计算表达式创建非标准计算的概念,处理选项值的代码,有自定义的值绑定读取实际值,如同标准值.既然我们已经知道如何转换计算表达式,也就知道我们的 Bind 成员会接收值和 lambda 函数.因为我们处理的是选项类型计算表达式,只有当值是 Some(x) 而不是 None 时,我们才打算执行 lambda 表达式:后一种情况,我们可以立即返回 None. 要运行前面的例子,我们需要在 C# 中实现 LINQ 查询运算符,在 F

PPTP服务器配置选项详解

PPTP服务器配置选项详解 导读 PPTP服务器配置文件的格式与其它许多Unix程序相似,每一行包含一项配置内容,以配置选项名称开始,后面紧跟参数值或者关键字,它们之间用空格分隔.在读取配置文件时,pptpd进程将忽略空行和每一行"#"后面的注释.PPTP服务器的配置比较简单,总共只有12个配置选项,下面对这些选项进行详细的说明: 指定选项文件 option option-file 功能:指定一个选项文件,里面内容作为pptpd进程启动时的命令行参数.与执行pptpd命令时使用&quo

【Linux命令详解】12、文本内容显示—[ cat、tac]

12.本节主要学习在linux系统下文本文件内容显示的相关命令,这些命令有cat.tac等. 12.1 cat 使用cat命令可以显示文本文件的内容,也可以把几个文件内容附加到另一个文件中. 12.1.1 命令语法: cat[选项][文件] 12.1.2选项参数: cat命令选项含义 选项                      选项含义 -n                        对输出的所有行编号 -b                        对非空输出行编号 -s     

12.4.2 自定义 F# 语言

到目前为止,我们所讨论过的序列表达式,都是用 seq 标识符表示,后面的代码块括在大括号中.然而,F# 还允许我们创建自己的标识符,给代码块以特殊的意义.通常,这个功能称为计算表达式(computation expressions),而序列表达式是它的一个特例,是由 F#核心所实现,并经编译器优化. 我们已经知道,计算表达式可以包含标准的语言结构,比如 for 循环,还有别的结构,像 yield.在代码块之前的标识符,描述构造的意义,其方式与查询运算符(例如,Select 和 Where 扩展方

rsync工具的常用选项、ssh同步介绍

1. rsync工具介绍 rsync是数据备份工具(字面意思可以理解为远程同步),不仅可以远程同步数据,而且可以本地同步数据(类似与cp),但不同于cp或scp的一点是,它不会覆盖以前的数据(如果数据已经存在),而是先判断已经存在的数据和新数据的差异,只有数据不同时才会把不相同的部分覆盖. 安装rsync命令:#yum install -y rsync 讲解rsync的用法 举例将/etc/passwd同步到/tmp/目录下,并改名为1.txt,操作如下: # rsync -av /etc/pa

linux服务器开发二(系统编程)--线程相关

线程概念 什么是线程 LWP:Light Weight Process,轻量级的进程,本质仍是进程(在Linux环境下). 进程:独立地址空间,拥有PCB. 线程:也有PCB,但没有独立的地址空间(共享). 进程与线程的区别:在于是否共享地址空间. 独居(进程). 合租(线程). Linux下: 线程:最小的执行单位. 进程:最小分配资源单位,可看成是一个线程的进程. 安装man文档 sudo apt-get install glibc-doc sudo apt-get install manp

一步一步跟我学习hadoop(3)----hadoop命令手册

上节我们学习了hadoop的eclipse插件安装和wordcount程序的运行,本篇对hadoop命令进行一个系统的了解 hadoop的命令通过HADOOP_HOME\bin\hadoop命令触发,我们可以在命令行执行 hadoop --help 来提示用户的命令输入. hadoop命令分为两大类:用户命令和管理命令,以下是hadoop命令的详细解读 本篇博客是摘自官网http://hadoop.apache.org/docs/r1.0.4/cn/commands_manual.html 0概

Tomcat Cluster

此处仅讨论Tomcat 的LB集群,因为考虑到要实现会话保持,而实现会话保持的方法大体有三类: A.Session Sticky 实现:nginx,httpd,haproxy,lvs等 B.Session Cluster 实现:tomcat session cluster + tomcat delta manager等 C.Session Server 实现:memcached,varnish等 接下来将以LAMT来实践演示Tomcat的LB集群. A.基于Session Sticky的实现:

TCP/IP协议族

TCP/IP协议 TCP/IP协议栈主要分为四层:应用层.传输层.网络层.数据链路层,每层都有相应的协议,现在几乎所有的操作系统都实现了TCP/IP协议栈.如下图 上图运输层应为传输层 所谓的协议就是双方进行数据传输的一种格式.整个网络中使用的协议有很多,所幸的是每一种协议都有RFC文档.在这里只对IP.TCP.UDP协议头做一个分析. 首先来看看在网络中,一帧 以太网数据包的格式: 在Linux 操作系统中,当我们想发送数据的时候,我们只需要在上层准备好数据,然后提交给内核协议栈 , 内核协议