如果我有多个线程并且我想等待一个线程完成,为什么根据 pthread_join() 函数这是未定义的?
例如,下面的代码显示线程 1 和 2 等待线程 0:
void* thread1(void* t1){
..
pthread_join(pthread_t thread0, void **retval1);
return NULL
}
void* thread2(void* t2){
..
pthread_join(pthread_t thread0, void **retval2);
return NULL
}
为什么这种行为是未定义的或者换句话说是不可能的?
最佳答案
pthread_t 对象通常会指向一些与线程相关的已分配数据。这些数据通常是线程的返回值。 pthread_join
将读取返回值并释放线程数据。
如果你pthread_join
相同的pthread id两次,你就遇到了双重释放的情况。指向的数据可能在第二次连接时无效,但也可能被另一个线程以不可预测的方式重用。
结果很难/不可能推理。因此,UB。
关于c - 如果多个线程加入一个线程,为什么它是未定义的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57873476/