pthreadcancel(如何判断pthread)

2025-04-19 06:50:01 0

pthreadcancel(如何判断pthread)

本文目录

如何判断pthread

1.从线程函数return。这种方法对主线程不适用,从main函数return相当于调用exit。2.一个线程可以调用pthread_cancel终止同一进程中的另一个线程。3.线程可以调用pthread_exit终止自己。

请问各位什么情况下用pthread_setcancelstate()和pthread_testcancel()函数

你的理解不对。

 

首先,pthread_setcancelstate()函数只是改变本线程(注意是本线程)的cancel state。所以T1进入fun()函数,执行到pthread_setcancelstate()函数时,只是改变了T1本身的cancel state,并不能改变T2的cancel state。

 

第二,线程执行到pthread_testcancel()函数时,并不一定会马上取消(退出)。

 

先描述一下取消一个线程的过程:

1) 其他线程通过调用pthread_cancel()函数,向目标线程发送取消请求(cancellation request)。

2) 取消请求发出后,根据目标线程的cancel state来决定取消请求是否会到达目标线程:

a. 如果目标线程的cancel state是PTHREAD_CANCEL_ENABLE(默认),取消请求会到达目标线程。

b. 如果目标线程的cancel state是PTHREAD_CANCEL_DISABLE,取消请求会被放入队列。直到目标线程的cancel state变为PTHREAD_CANCEL_ENABLE,取消请求才会从队列里取出,发到目标线程。

3) 取消请求到达目标线程后,根据目标线程的cancel type来决定线程何时取消:

a. 如果目标线程的cancel type是PTHREAD_CANCEL_DEFERRED(默认),目标线程并不会马上取消,而是在执行下一条cancellation point的时候才会取消。有很多系统函数都是cancellation point,详细的列表可以在Linux上用man 7 pthreads查看。除了列出来的cancellation point,pthread_testcancel()也是一个cancellation point。就是说目标线程执行到pthread_testcancel()函数的时候,如果该线程收到过取消请求,而且它的cancel type是PTHREAD_CANCEL_DEFERRED,那么这个线程就会在这个函数里取消(退出),这个函数就不再返回了,目标线程也没有了。

b. 如果目标线程的cancel type是PTHREAD_CANCEL_ASYNCHRONOUS,目标线程会立即取消(这里的“立即”只是说目标线程不用等执行到属于cancellation point的函数的时候才会取消,它会在获得调度之后立即取消,因为内核调度会有延时,所以并不能保证时间上的“立即”)。

 

举个例子,说明一下这些与线程取消相关的函数的用法:

void thread_function(void *arg){/*** 线程准备执行一些关键工作,在这个过程中不希望被取消。* 所以先通过pthread_setcancelstate()将本线程的cancel state* 设为disabled。*/pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL);/* 执行关键工作 */.../*** 关键工作执行完成,可以被取消。* 通过pthread_setcancelstate()将本线程的cancel state* 设为enabled。*/pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);/*** 调用pthread_testcancel()函数,检查一下在cancel state* 为disabled状态的时候,是否有取消请求发送给本线程。* 如果有的话就取消(退出)。*/pthread_testcancel();/*** pthread_testcancel()返回了,表明之前没有取消请求发送给本线程,* 继续其余的工作。* 这时候如果有取消请求发送给本线程,会在下一次执行到* cancellation point的时候(例如sleep(), read(), write(), ...)时取消。*/.../*** 从这里开始,函数里不再包含cancellation point了。* 如果收到取消请求,将无法取消。所以先把本线程的cancel type* 设为asynchronous,收到取消请求将立即取消。*/pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);/* 不包含cancellation point的代码 */...}

pthreadcancel(如何判断pthread)

本文编辑:admin
: pthreadcancel,

更多文章:


表白网站制作教程(怎么快速的制作表白网页而且能一直访问)

表白网站制作教程(怎么快速的制作表白网页而且能一直访问)

本文目录怎么快速的制作表白网页而且能一直访问如何制作表白链接怎么制作网站怎么在手机上做表白网站怎么快速的制作表白网页而且能一直访问网上有在线制作的,但是一般都会一段时间就没了,这是因为一个网站如果有大批量的人制作,会占用服务器资源,所以开了

2025年2月18日 13:10

hercules(Hercules)

hercules(Hercules)

本文目录HerculesHercules是什么意思Hercules希腊&罗马神话英雄。。。希腊名是 赫拉克勒斯 这是罗马名,辞海上解作 赫丘利N年前,香港版的这个动画(Disney的,大家都知道啦)呢,就读作 “海格力斯”。。。。。也

2025年3月13日 10:00

hcna学习指南(想考hcna,如何备考)

hcna学习指南(想考hcna,如何备考)

本文目录想考hcna,如何备考新人学习hcna往哪个方面学习想考hcna,如何备考可以自学,HCIA看视频去理解,做实验去消化,看书增加广度。可以看华为官方的教材HCIA学习指南,也可以看看CCNA学习指南。HCIA,之前叫做HCNA。HC

2025年4月18日 18:10

可视化建站软件(求中国国内目前最好的建站软件!)

可视化建站软件(求中国国内目前最好的建站软件!)

本文目录求中国国内目前最好的建站软件!谁能帮我推荐几个建网站的软件,谢啦!新手建站,选什么建站软件好呢求中国国内目前最好的建站软件!国内目前最受欢迎的自助建站系统卓天网络 的在线企业建站系统----建站宝盒,在业内一直是很有名气的,它的可视

2025年4月2日 11:50

CAD制图中dwg图形文件与dxf图形文件有什么区别?dxf文件用什么打开

CAD制图中dwg图形文件与dxf图形文件有什么区别?dxf文件用什么打开

本文目录CAD制图中dwg图形文件与dxf图形文件有什么区别dxf文件用什么打开dxf文件用什么软件打开微信怎么看dxf文件CAD制图中dwg图形文件与dxf图形文件有什么区别CAD制图中dwg图形文件与dxf图形文件区别为:性质不同、打开

2025年3月11日 11:00

github官网下载app安卓(手机怎么安装github软件)

github官网下载app安卓(手机怎么安装github软件)

本文目录手机怎么安装github软件github客户端怎么下载github手机版官网怎么安装到手机上手机github下载按钮在哪如何从github安装软件GitHub上面下载的一个开源android项目用不了,请问正确的打开方式手机怎么安装

2025年2月26日 11:10

51ppt模板网站(新手老师做PPT,有哪些网站有可以参考的模版)

51ppt模板网站(新手老师做PPT,有哪些网站有可以参考的模版)

本文目录新手老师做PPT,有哪些网站有可以参考的模版免费下载各种PPT文件的网站有哪些新手老师做PPT,有哪些网站有可以参考的模版主要是里面有很课件资源可以参考,然后适当的加入自己的想法,节约了不少备课时间。真心推荐使用。但一次公开课看到我

2025年4月17日 11:10

十进制转八进制过程(十进制,八进制互转)

十进制转八进制过程(十进制,八进制互转)

本文目录十进制,八进制互转10进制的小数怎么转化成8进制,详细点,再举点例子十进制数64转换为八进制怎么转换要详细过程,谢啦十进制转八进制方法与过程以及例题解法如何将十进制转换成八进制和十六进制将十进制数520转换成八进制、十六进制(写出计

2025年4月3日 15:50

system getproperty(请问大家:在java中System.getProperties()获取的属性信息都是获取的具体哪个配置文件里的信息)

system getproperty(请问大家:在java中System.getProperties()获取的属性信息都是获取的具体哪个配置文件里的信息)

本文目录请问大家:在java中System.getProperties()获取的属性信息都是获取的具体哪个配置文件里的信息linux中不能system.getproperty么java 中System.getProperty( dic.di

2025年3月24日 08:10

谷歌搜索引擎首页(google日本主页)

谷歌搜索引擎首页(google日本主页)

本文目录google日本主页国外的谷歌收索引擎看到过有人用Google搜索引擎时 页面时英文版的 搜索的内容都是英文的 请问怎么实现的谷歌浏览器打开出现百度搜索怎样恢复打开百打开谷歌为主页谷歌官网是什么如何更改chrome浏览器首页的搜索

2025年3月3日 20:50

analytics是什么意思(出国留学business analytics的未来工作方向是什么)

analytics是什么意思(出国留学business analytics的未来工作方向是什么)

本文目录出国留学business analytics的未来工作方向是什么business analytics到底是一门什么专业新兴专业BA(business analytics)到底学什么发展前景怎样出国留学business analyti

2025年2月21日 14:40

budget翻译(用budget翻译只要在预算之内 我不明白为何不可以)

budget翻译(用budget翻译只要在预算之内 我不明白为何不可以)

本文目录用budget翻译只要在预算之内 我不明白为何不可以Budget是什么意思呢Budget是什么意思‘预算’英语怎么拼Budget代表什么用budget翻译只要在预算之内 我不明白为何不可以在预算之内:under budget;wit

2025年2月9日 15:00

anchor是什么品牌啊(angn是什么品牌)

anchor是什么品牌啊(angn是什么品牌)

本文目录angn是什么品牌品牌奶酪有哪些妙可蓝多是大品牌吗angn是什么品牌angn是一个国内的男装品牌,专注于大众化的。安佳,全球知名乳制品品牌。1886年诞生于新西兰,产品热销全球70多个国家和地区。根据中国商标网公示信息,商标“安佳A

2025年4月4日 17:30

swipe音译(英文的发音(一个单词)要和中文的相似)

swipe音译(英文的发音(一个单词)要和中文的相似)

本文目录英文的发音(一个单词)要和中文的相似一些舞蹈的名称(专业术语)拼凑的断音罗马音变成中文谐音swipe是什么意思,词典释义与在线翻译英文的发音(一个单词)要和中文的相似其实你只要起一个英文名字就可以了,对吧?我建议《1》叫jackso

2025年2月11日 06:50

php 数组(什么是PHP数组PHP数组有哪几类)

php 数组(什么是PHP数组PHP数组有哪几类)

本文目录什么是PHP数组PHP数组有哪几类php数组合并array_merge()函数使用注意事项php 多个数组合并什么是PHP数组PHP数组有哪几类不贴内容了,原因几个帖子,题主看一看,对PHP数组会有一个深刻的认识。大多是对数组有个印

2025年4月13日 10:30

消息队列rabbitmq面试(有谁学过消息队列RabbitMQ,推荐一个教程啊,适合新手的,有实际操作讲解的最好)

消息队列rabbitmq面试(有谁学过消息队列RabbitMQ,推荐一个教程啊,适合新手的,有实际操作讲解的最好)

本文目录有谁学过消息队列RabbitMQ,推荐一个教程啊,适合新手的,有实际操作讲解的最好有在实际开发中用到过rabbitmq等其他消息队列的仁兄呀,最近学习了rabbitmq的各种用法,Java实习工作需要具备哪些能力有谁学过消息队列Ra

2025年3月6日 00:40

linux系统命令(linux必学的60个命令)

linux系统命令(linux必学的60个命令)

本文目录linux必学的60个命令linux基本命令【Linux】 Linux初学者,需要先学习和熟练哪些命令Linux常用命令全集LINUX系统有哪些危险命令linux常用的命令有哪些linux必学的60个命令Linux常用的命令可以分为

2025年2月28日 15:30

网页个人主页设计(关于个人主页网站设计的原则)

网页个人主页设计(关于个人主页网站设计的原则)

本文目录关于个人主页网站设计的原则网页设计与制作(个人主页)如何建立web网站来制作个人主页如何设计一个个人网站关于个人主页网站设计的原则简洁性从人记忆能力角度来说,由于人的大脑一次最多可记忆五到七条信息,因此如果希望人们在看完你的页面后能

2025年4月13日 04:20

accomplished怎么读(accomplished怎么读)

accomplished怎么读(accomplished怎么读)

本文目录accomplished怎么读任务胜利用英语怎么读accomplished怎么读读法,额卡姆布蕾仕特accomplished 英 形近词: accomplisher任务胜利用英语怎么读任务胜利英语是 victory of task,

2025年4月9日 21:20

c  多线程(C语言怎样实现多线程)

c 多线程(C语言怎样实现多线程)

本文目录C语言怎样实现多线程c语言多线程问题C语言多线程的优势c的多线程实现c语言中怎样创建多线程C语言如何实现多线程同时运行c语言实现多线程C语言能实现多线程么c语言如何编写一个简单的多线程程序C语言怎样实现多线程首先你要有控制蛇移动方向

2025年3月23日 07:50

近期文章

什么是ip地址?什么是ip
2025-04-19 05:50:02
本站热文

harbor,port,pier的区别?谁能解释“harbour“(港口)与“pier“(码头)的区别
2025-02-22 17:40:03 浏览:20
ibatis foreach(ibatis 批量update操作)
2025-02-10 23:40:06 浏览:7
endless rain(endless rain表达什么情感)
2025-02-14 06:00:02 浏览:7
标签列表

热门搜索