专栏首页皮振伟的专栏[nptl][pthread]一种判断thread是否在执行的方法

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

前言: 主线程中怎么确定某线程是否在执行? 作者遇到这个问题,第一感觉有点蒙。翻了一下glibc的代码,算是找到一个比较好的办法吧。 分析: 1,变量控制 这个很简单,在线程执行进入的时候,写控制变量running = true。线程将要退出的时候,写控制变量running = false,判断running这个变量就可以知道线程是否在执行了。 这个方法简单粗暴,在绝大多数的情况下都是能工作的。但是,有一种比较极端的情况:某线程正好赋值完控制变量,但是函数体还没有结束(对应的内核task当然也还在),这是主线程读取到的控制变量符合条件了,可是线程还没有结束。 2,信号 使用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就可以判断出来了。 不过,前提是这个线程是JOINABLE类型的(线程通过attr指定,分为DETACHED和JOINABLE两种,其中JOINABLE是默认的)。 后记: 这个小问题,说简单不简单,说难不难的。。 Orz

本文分享自微信公众号 - AlwaysGeek(gh_d0972b1eeb60),作者:AlwaysGeek

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-03-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • [nptl][mutex]老司机带你十分钟定位死锁问题

    前言: 死锁问题,几乎可以用“自古”来形容。PV原语一出,信号量嵌套使用,就伴随着死锁问题的发生。死锁类问题的解决过程,基本上就是定位到发生死锁的位置以及原因,...

    皮振伟
  • [x86][kvm]avx512指令相关

    前文《[x86][linux]AVX512指令引起的进程crash》中,介绍了一次因为avx512指令导致的进程crash。

    皮振伟
  • [x86][linux]AVX512指令引起的进程crash

    问题背景: 在开发机上编译ovs,在目标机器上运行,出现来ovs-vswitchd崩溃,dmesg得到如下信息: [ 2807.148361] traps: o...

    皮振伟
  • 记一次Date引起的线上BUG处理

    在Java8以前,每每操控时间,我们经常使用的类库就是Date,并且会通过SimpleDateFormat类对时间进行格式化。你可知道?Date类是一个可变类,...

    程序员小明
  • python多线程开发

           通过threading.Thread创建一个线程对象,target是目标函数,name可以指定自己喜欢的名字,线程的启动需要借助start方法。线...

    py3study
  • java.util.concurrent 在shorturl项目中的应用

    问题:微博短链项目应用到哪些concurrent包中的类,类的用途是什么?场景是怎样?效果? java.util.concurrent.atomic.Atomi...

    财主刀刀
  • java多线程中的死锁、活锁、饥饿、无锁都是什么鬼?

    死锁、活锁、饥饿是关于多线程是否活跃出现的运行阻塞障碍问题,如果线程出现了这三种情况,即线程不再活跃,不能再正常地执行下去了。 死锁 死锁是多线程中最差的一种情...

    Java技术栈
  • Java线程池

           概述:         线程池,从字面含义来看是管理同一组同构工作线程的资源池。线程池与工作队列是密切相关的, 工作队列保存了所有等待执行的...

    用户1215919
  • Java多线程:线程属性

    喜欢天文的pony站长
  • JUC线程池ThreadPoolExecutor源码分析

    很早之前就打算看一次JUC线程池ThreadPoolExecutor的源码实现,由于近段时间比较忙,一直没有时间整理出源码分析的文章。之前在分析扩展线程池实现可...

    Throwable

扫码关注云+社区

领取腾讯云代金券