pthread_cond_wait переводит поток в состояние ожидания - PullRequest
2 голосов
/ 29 февраля 2012

pthread_cond_wait переводит вызывающий поток в состояние ожидания, которое будет вызвано pthread_cond_signal / pthread_cond_broadcast, чтобы он не опрашивал и не сбивал процессор?

Кроме того, sem_wait переводит поток в состояние ожидания? Если я правильно понимаю, методы получения / освобождения мьютекса заставляют потоки непрерывно опрашивать мьютекс и не переводят поток в состояние ожидания.

Ответы [ 2 ]

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

Да, pthread_cond_wait, в случае успеха заставляет поток ждать уведомления.Это цель вызова.

sem_wait переведет поток в состояние ожидания , если семафор не может быть уменьшен.В высоком состоянии вызов будет немедленно возвращен.

В большинстве случаев вам не нужно беспокоиться о том, реализованы ли блокировки с помощью ожидания занятости или выдачи планировщика.В любом случае вы получаете гарантированное поведение, и, как правило, разработчик библиотеки выбирает наиболее эффективный метод, доступный на платформе, на которой вы работаете.В некоторых случаях (когда у вас более одного ядра и ожидаемое время ожидания мало) это ожидание занято.

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

Да, задача, которая вызывает pthread_cond_wait (), будет переведена в состояние ожидания:

   pthread_cond_wait atomically  releases mutex and cause the
   calling thread to block on the condition  variable  cond

Во внутреннем текущем linux он использует futex для работы.

sem_wait будет блокировать задачу, пока не станет возможным выполнить декремент для семафора, если семафор в настоящее время имеет значение ноль при вызове.

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