如何检查pthread是否可以连接?

时间:2016-01-07 22:00:52

标签: multithreading pthreads pthread-join

我知道我可以创建一个带有可连接属性集的pthread,但是一旦创建了

  1. 我是对的,我也可以将那个pthread更改为超然 并行线程?
  2. 如果是这样,我该如何检查pthread是否可以加入?如何将pthread从joinable更改为detached?

2 个答案:

答案 0 :(得分:1)

  1. 是的,你可以。只需在主题上调用SIMS_BOX
  2. 您有多种选择。
  3. 一个。如果您已使用指定的pthread_detach()启动了线程,并且此pthread_attr仍然存在,则可以通过调用pthread_attr来可靠地检查可加入状态。如果pthread_attr_getdetachstate不可用,并且您使用的是Linux,则可以通过调用pthread_attr来重新查询该属性 - 请注意,pthread_getattr_np表示非Posix,因此这可能是Linux-仅

    湾你可以尝试加入它。一个不可连接的pthread通常会 返回_np。这不是POSIX的标准,但您可以依赖它,例如Linux - 以及Solaris和其他主要系统。

    ℃。最简单的选择是简单地自己跟踪你的线程,这样你就可以通过检查程序状态来了解特定线程是否可以连接。

答案 1 :(得分:1)

  

我是对的,我也可以将pthread更改为独立的pthread?

是的,这是对的。

  

如果是这样,我该如何检查pthread是否可以加入?

你不能,并且要求这样做没有任何意义。除非你有一个你知道的事实尚未加入的可连接pthread,否则没有你要检查的pthread。分离或连接的pthread可能不再存在,因此没有" pthread"你可以查一下。

无法检查可能或可能不是线程的东西是否是线程。那些建议不这样做的人要求你依赖那些无法保证的行为,这将是非常愚蠢的。

  

如何将pthread从joinable更改为detached?

您可以随时拨打pthread_detach将其分离,也可以自行分离。最常见的模式是某些东西拥有该线程,并且该东西负责在线程完成(或关闭)时加入该线程。如果你只想要一个线程运行,直到它完成而没有任何监督或所有权,分离它或让它自行分离。