如何检查 pthread 是否可连接?
how to check if a pthread is joinable?
我知道我可以创建一个具有可连接属性集的 pthread,但是一旦创建,
- 我说得对吗,我也可以将该 pthread 更改为分离线程
pthread?
- 如果是这样,我如何检查 pthread 是否可连接?以及如何将 pthread 从可连接更改为可分离?
- 是的,你可以。只需在线程上调用
pthread_detach()
。
- 您有多种选择。
一个。如果您已经启动了指定 pthread_attr
的线程,并且此 pthread_attr
仍然存在,您可以通过调用 pthread_attr_getdetachstate
可靠地检查可加入状态。如果 pthread_attr
不可用,而您在 Linux,您可以通过调用 pthread_getattr_np
重新查询属性 - 请注意,_np
表示 non-Posix,因此这可能是 Linux-only.
b。您可以简单地尝试加入它。不可连接的 pthread 通常会
return EINVAL
。这不是 POSIX 的标准,但是您可以依赖 Linux - 以及 Solaris 和可能的其他主要系统。
c。最简单的选择是自己简单地跟踪您的线程,这样您将始终通过检查您的程序状态就知道特定线程是否可连接。
am I right that I can also change that pthread to a detached pthread?
是的,没错。
If that's the case, how can I check if a pthread is joinable?
你不能,要求这样做没有任何意义。除非您有一个可连接的 pthread,并且您知道该 pthread 尚未被连接,否则没有 pthread 供您检查。分离或连接的 pthread 可能不再存在,因此没有 "a pthread" 供您检查。
无法检查实际上可能是线程或可能不是线程的事物是否是线程。提出其他建议的人要求您依赖没有保证的行为,那将是极其愚蠢的。
And how can I change a pthread from joinable to detached?
您可以随时通过调用 pthread_detach
将其分离,或者它可以自行分离。最常见的模式是某物拥有线程,并且该物负责在线程完成(或关闭)时加入线程。如果您只想让一个线程 运行 在没有任何监督或所有权的情况下完成,请将其分离或让它自行分离。
我知道我可以创建一个具有可连接属性集的 pthread,但是一旦创建,
- 我说得对吗,我也可以将该 pthread 更改为分离线程 pthread?
- 如果是这样,我如何检查 pthread 是否可连接?以及如何将 pthread 从可连接更改为可分离?
- 是的,你可以。只需在线程上调用
pthread_detach()
。 - 您有多种选择。
一个。如果您已经启动了指定 pthread_attr
的线程,并且此 pthread_attr
仍然存在,您可以通过调用 pthread_attr_getdetachstate
可靠地检查可加入状态。如果 pthread_attr
不可用,而您在 Linux,您可以通过调用 pthread_getattr_np
重新查询属性 - 请注意,_np
表示 non-Posix,因此这可能是 Linux-only.
b。您可以简单地尝试加入它。不可连接的 pthread 通常会
return EINVAL
。这不是 POSIX 的标准,但是您可以依赖 Linux - 以及 Solaris 和可能的其他主要系统。
c。最简单的选择是自己简单地跟踪您的线程,这样您将始终通过检查您的程序状态就知道特定线程是否可连接。
am I right that I can also change that pthread to a detached pthread?
是的,没错。
If that's the case, how can I check if a pthread is joinable?
你不能,要求这样做没有任何意义。除非您有一个可连接的 pthread,并且您知道该 pthread 尚未被连接,否则没有 pthread 供您检查。分离或连接的 pthread 可能不再存在,因此没有 "a pthread" 供您检查。
无法检查实际上可能是线程或可能不是线程的事物是否是线程。提出其他建议的人要求您依赖没有保证的行为,那将是极其愚蠢的。
And how can I change a pthread from joinable to detached?
您可以随时通过调用 pthread_detach
将其分离,或者它可以自行分离。最常见的模式是某物拥有线程,并且该物负责在线程完成(或关闭)时加入线程。如果您只想让一个线程 运行 在没有任何监督或所有权的情况下完成,请将其分离或让它自行分离。