如何确定分离的 pthread 是否还处于活动状态?

2024-11-14 08:29:00
admin
原创
16
摘要:问题描述:如何确定分离的 pthread 是否仍然有效?我有一个与线程的通信通道(一个从线程向外指向的单向队列)但是如果线程突然死亡会发生什么?我是否应该放弃使用进程信号或者是否可以以某种方式探测线程活跃性?解决方案 1:对于可连接(即非分离)的 pthread,你可以像这样使用pthread_kill :i...

问题描述:

如何确定分离的 pthread 是否仍然有效

我有一个与线程的通信通道(一个从线程向外指向的单向队列)但是如果线程突然死亡会发生什么?

我是否应该放弃使用进程信号或者是否可以以某种方式探测线程活跃性?


解决方案 1:

对于可连接(即非分离)的 pthread,你可以像这样使用pthread_kill :

int ret = pthread_kill(YOUR_PTHREAD_ID, 0);

如果您得到ESRCH值,则可能表示您的线程已死亡。

然而这并不适用于分离的 pthreads,因为在它结束后,它的线程 ID 可以被另一个线程重新使用。

来自评论:

答案是错误的,因为如果线程已分离且未处于活动状态,则 pthread_t 无效。您无法将其传递给 pthread_kill。例如,它可能是指向已释放的结构的指针,从而导致程序崩溃。POSIX 规定:“符合要求的实现可以在线程 ID 的生命周期结束后自由重用该线程 ID。如果应用程序尝试使用生命周期已结束的线程 ID,则行为未定义。” – 感谢@DavidSchwartz

解决方案 2:

这个问题假设设计中存在不可避免的竞争条件。

据推测,你打算做这样的事情:

  1. 检查线程是否还活着

  2. 等待线程消息

问题是这个序列不是原子的,无法修复。具体来说,如果你正在检查的线程在步骤 (1) 和步骤 (2) 之间死亡了怎么办?

竞争条件很可怕,罕见竞争条件更是雪上加霜。用 99.999% 可靠的事物掩盖 90% 可靠的事物是你可能做出的最糟糕的决定之一。

对你的问题的正确回答是“不要这样做”。相反,应该修复你的应用程序,使线程不会随机死亡。

如果这是不可能的,而且有些线程容易崩溃,而您需要从中恢复……那么您的设计从根本上就是有缺陷的,您不应该使用线程。将那个不可靠的东西放在不同的进程中,并使用管道与其通信。进程死亡会关闭文件描述符,而读取另一端已关闭的管道具有明确定义、易于检测、无竞争的行为。

解决方案 3:

当您向已死线程发送信号时,这可能是未定义的行为。您的应用程序可能会崩溃。请参阅http://sourceware.org/bugzilla/show_bug.cgi?id=4509http://udrepper.livejournal.com/16844.html

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   601  
  华为IPD与传统研发模式的8大差异在快速变化的商业环境中,产品研发模式的选择直接决定了企业的市场响应速度和竞争力。华为作为全球领先的通信技术解决方案供应商,其成功在很大程度上得益于对产品研发模式的持续创新。华为引入并深度定制的集成产品开发(IPD)体系,相较于传统的研发模式,展现出了显著的差异和优势。本文将详细探讨华为...
IPD流程是谁发明的   7  
  如何通过IPD流程缩短产品上市时间?在快速变化的市场环境中,产品上市时间成为企业竞争力的关键因素之一。集成产品开发(IPD, Integrated Product Development)作为一种先进的产品研发管理方法,通过其结构化的流程设计和跨部门协作机制,显著缩短了产品上市时间,提高了市场响应速度。本文将深入探讨如...
华为IPD流程   9  
  在项目管理领域,IPD(Integrated Product Development,集成产品开发)流程图是连接创意、设计与市场成功的桥梁。它不仅是一个视觉工具,更是一种战略思维方式的体现,帮助团队高效协同,确保产品按时、按质、按量推向市场。尽管IPD流程图可能初看之下显得错综复杂,但只需掌握几个关键点,你便能轻松驾驭...
IPD开发流程管理   8  
  在项目管理领域,集成产品开发(IPD)流程被视为提升产品上市速度、增强团队协作与创新能力的重要工具。然而,尽管IPD流程拥有诸多优势,其实施过程中仍可能遭遇多种挑战,导致项目失败。本文旨在深入探讨八个常见的IPD流程失败原因,并提出相应的解决方法,以帮助项目管理者规避风险,确保项目成功。缺乏明确的项目目标与战略对齐IP...
IPD流程图   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用