Могут ли 2 переменные условия pthread совместно использовать один и тот же мьютекс? - PullRequest
15 голосов
/ 31 октября 2010

Я просмотрел документацию в http://www.opengroup.org/onlinepubs/009695399/functions/pthread_cond_wait.html, но это явно не упоминается.Любой быстрый ответ будет очень признателен.

Ответы [ 2 ]

25 голосов
/ 31 октября 2010

Да.Это обычная практика:

Типичный пример:

mutex queue_mutex; 
cond queue_is_not_full_cond;
cond queue_is_not_empty_cond;

push() 
   lock(queue_mutex)
      while(queue is full)
        wait(queue_is_not_full_cond,queue_mutex);
      do push...
      signal(queue_is_not_empty_cond)
   unlock(queue_mutex)

pop() 
   lock(queue_mutex)
      while(queue is empty)
        wait(queue_is_not_empty_cond,queue_mutex);
      do pop...
      signal(queue_is_not_full_cond)
   unlock(queue_mutex)
18 голосов
/ 31 октября 2010

Да. Иногда это хорошая идея, если у вас есть отдельные условия, которые вы хотели бы подождать. Например, у вас могут быть переменные очереди и условия как для «не заполненных», так и «не пустых» и т. Д. Кто-то, помещающий данные в очередь, ожидает «не заполненных». Кто-то, удаляющий данные из очереди, ожидает "не пусто". Все они используют один и тот же мьютекс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...