Подтвердить что ты не робот

Могут ли переменные состояния 2 pthread использовать один и тот же мьютекс?

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

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)