gpt4 book ai didi

linux - 是否存在无效的 pthread_t id?

转载 作者:太空宇宙 更新时间:2023-11-04 12:08:11 30 4
gpt4 key购买 nike

我想为给定的线程 ID 调用 pthread_join,但前提是该线程已经启动。安全的解决方案可能是添加一个变量来跟踪哪个线程已启动或未启动。但是,我想知道是否可以检查 pthread_t 变量,类似于以下代码。

pthread_t thr1 = some_invalid_value; //0 ?
pthread_t thr2 = some_invalid_value;

/* thread 1 and 2 are strated or not depending on various condition */
....

/* cleanup */
if(thr1 != some_invalid_value)
pthread_join(&thr1);

if(thr2 != some_invalid_value)
pthread_join(&thr2);

其中 some_invalid_value 可以是 0,或者依赖于实现的“PTHREAD_INVALID_ID”宏

附言:我的假设是 pthread_t 类型是可比较和可分配的,假设基于

缴费灵:我想这样做,因为我认为在无效线程 ID 上调用 pthread_join 是未定义的行为。它不是。但是,加入先前加入的线程是未定义的行为。现在让我们假设上面的“函数”被重复调用。无条件地调用 pthread_join 并检查结果可能会导致在先前加入的线程上调用 pthread_join。

最佳答案

您的假设一开始就不正确。 pthread_t 对象是不透明的。您不能在 C 中直接比较 pthread_t 类型。您应该改用 pthread_equal。

另一个考虑是如果 pthread_create 失败,你的 pthread_t 的内容将是未定义的。它可能不会再设置为您的无效值。

我的偏好是保留 pthread_create 调用的返回值(以及线程 ID)并使用它来确定每个线程是否已正确启动。

关于linux - 是否存在无效的 pthread_t id?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49859375/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com