Pthread的同步 - 调用pthread_cond_wait
问题描述:
在我的功能一个点,将达到Pthread的同步 - 调用pthread_cond_wait
调用pthread_cond_wait(& cond_state,& b_state);
当一个信号发送并唤醒此线程。在它调用Enter之前立即尝试对互斥锁执行锁定吗?
void Enter(int g, int timer){
pthread_mutex_lock(&b_state);
if (room.state == 2 || room.state == g)
{
pthread_mutex_unlock(&b_state);
Leave();
}
else
{
pthread_cond_wait(&cond_state, &b_state);
Enter(g, timer); //Try to enter again
}
}
我有一个问题,当如果一个线程睡觉去了,一旦它醒来,它会被卡在后调用的mutex_lock输入。
答
是的,pthread_cond_wait
手册页说:
等待的线程疏导另一个线程调用后才 调用pthread_cond_signal(3),或调用pthread_cond_broadcast(3)具有相同 条件变量,和当前线程重新获得锁 互斥锁。