Pthread Sync - pthread_cond_wait - PullRequest
       43

Pthread Sync - pthread_cond_wait

0 голосов
/ 07 февраля 2012

В какой-то момент моей функции он достигнет

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 после вызова Enter.

1 Ответ

2 голосов
/ 07 февраля 2012

Да, на странице pthread_cond_wait написано:

Ожидающий поток разблокируется только после вызова другого потока. pthread_cond_signal (3) или pthread_cond_broadcast (3) с тем же переменная условия, , и текущий поток снова получает блокировку мьютекс .

...