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)具有相同 条件变量,和当前线程重新获得锁 互斥锁