我知道我可以创建一个带有可连接属性集的pthread,但是一旦创建了
答案 0 :(得分:1)
SIMS_BOX
。一个。如果您已使用指定的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
将其分离,也可以自行分离。最常见的模式是某些东西拥有该线程,并且该东西负责在线程完成(或关闭)时加入该线程。如果你只想要一个线程运行,直到它完成而没有任何监督或所有权,分离它或让它自行分离。