【发布时间】:2020-12-12 09:47:09
【问题描述】:
手册页说这个 pthread_cond_wait 以原子方式解锁互斥锁(根据 pthread_unlock_mutex)并等待条件变量 cond 发出信号。
但随后线程 start_function 可能被任何其他线程进入,导致两个线程处于关键块中。
void* start_function(){
pthread_mutex_lock(&mutex);
// critical block
pthread_mutex_unlock(&mutex);
}
int main(){
// code to create threads
pthread_cond_wait(&cond, &mutex);
}
所以在上面的代码中,当它点击 pthread_cond_wait 之后,它会解锁互斥锁?
【问题讨论】:
-
这是未定义的行为。互斥锁必须由调用
pthread_cond_wait的线程完全锁定,以防止出现不可预知的结果。 -
这就是解锁的重点,它允许其他人访问与互斥锁关联的资源。
标签: c multithreading pthreads mutex