我想调用pthread_join给定的线程id,但只有当该线程已经启动。安全的解决方案可能是添加一个变量来跟踪哪个线程是否启动。但是,我不知道检查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”宏
PS:
我的假设是pthread_t类型是可比较和可分配的,假设基于
PPS:
我想这样做,因为我认为调用pthread_join上无效的线程id是undefinde行为。不是这样。然而,加入先前加入的线程是未定义的行为。现在让我们假设上面的“函数”被重复调用。
无条件地调用pthread_join并检查结果可能导致在先前加入的线程中调用pthread_join。