相关文章推荐
求醉的斑马  ·  【C++】单例模式中的析构函数_c++单键需 ...·  1 月前    · 
玩命的猴子  ·  Highlight Data Points ...·  5 月前    · 
拉风的大熊猫  ·  WPF入门教程系列二十八 ...·  1 年前    · 
自信的小狗  ·  温柔的养猫人_高分内容_个人页_阿里云开发者社区·  1 年前    · 
想旅行的书签  ·  在进行机器学习,深度学习时,进行数据处理的时 ...·  1 年前    · 
卖萌的葡萄酒  ·  android - ...·  1 年前    · 
Code  ›  [nptl][pthread]一种判断thread是否在执行的方法开发者社区
线程 pthread
https://cloud.tencent.com/developer/article/1087482
从容的生姜
1 年前
作者头像
皮振伟
0 篇文章

[nptl][pthread]一种判断thread是否在执行的方法

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > 皮振伟的专栏 > [nptl][pthread]一种判断thread是否在执行的方法

[nptl][pthread]一种判断thread是否在执行的方法

作者头像
皮振伟
发布 于 2018-04-09 11:23:09
1.5K 0
发布 于 2018-04-09 11:23:09
举报

前言: 主线程中怎么确定某线程是否在执行? 作者遇到这个问题,第一感觉有点蒙。翻了一下glibc的代码,算是找到一个比较好的办法吧。 1,变量控制 这个很简单,在线程执行进入的时候,写控制变量running = true。线程将要退出的时候,写控制变量running = false,判断running这个变量就可以知道线程是否在执行了。 这个方法简单粗暴,在绝大多数的情况下都是能工作的。但是,有一种比较极端的情况:某线程正好赋值完控制变量,但是函数体还没有结束(对应的内核task当然也还在),这是主线程读取到的控制变量符合条件了,可是线程还没有结束。 使用tgkill给某线程发送信号。看一看tgkill的返回值:ESRCH No process with the specified thread ID (and thread group ID) exists. 如果返回了这个返回值,就说明线程已经退出了。 但是还是会有极端情况:例如给线程分配了1234,线程执行完,其他进程被分配了1234,那么这种方法就不能判断了。 3,try join 先看一段代码,glibc-2.23/nptl/pthread_tryjoin.c:

可见,pthread_tryjoin首先不会block住,如果线程还没有执行完,会返回EBUSY。所以,通过判断pthread_tryjoin的返回值是不是EBUSY就可以判断出来了。

 
推荐文章
求醉的斑马  ·  【C++】单例模式中的析构函数_c++单键需要析构嘛
1 月前
玩命的猴子  ·  Highlight Data Points in Context - Tableau
5 月前
拉风的大熊猫  ·  WPF入门教程系列二十八 ——DataGrid使用示例MVVM模式(6) - DotNet菜园 - 博客园
1 年前
自信的小狗  ·  温柔的养猫人_高分内容_个人页_阿里云开发者社区
1 年前
想旅行的书签  ·  在进行机器学习,深度学习时,进行数据处理的时候,datetime64类型不能作为特征,需要转化成float_机器学习数据类型转化float64_陈谦的博客-CSDN博客
1 年前
卖萌的葡萄酒  ·  android - 你应该知道的kotlin实用技巧 - 个人文章 - SegmentFault 思否
1 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号