Вход/Регистрация
Параллельное и распределенное программирование на С++
вернуться

Хьюз Камерон

Шрифт:

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

Будущие направления

Отсутствуют.

Смотри также

pthread_cancel, pthread_setcancelstate, то м Base Definitions стандарта IEEEStd ЮОЗ.1-2001, <pthread.h>.

Последовательность внесения изменений

Функции впервые реализованы в выпуске Issue 5. Включены для согласования с расширение м POSIX Threads Extension.

Issue 6

Функции pthread_cleanup_pop и pthread_cleanup_push от м ечены как часть опции Threads.

Добавлен раздел «За м ечания по использованию» (APPLICATION USAGE).

Раздел «Описание» был отредактирован с целью исключить из него слово « must» («должен»).

pthread_cond_broadcast,pthread_cond_signal

Имя

pthread_cond_broadcast,pthread_cond_signal

Описание

Эти функции используются для разблокировки потоков, заблокированных с помощью переменной условия.

Функция pthread_cond_broadcast позволяет разблокировать все потоки, заблокированные в данный момент с использованием переменной условия, заданной параметром cond.

Функция pthread_cond_signal используется для разблокировки по крайней мере одного из потоков, заблокированных с использованием условной переменной, заданной параметром cond (если таковые существуют). Если с использованием этой переменной условия заблокировано несколько потоков, то порядок разблокировки будет определен в соответствии с их стратегией планирования. Когда каждый поток, разблокированный в результате вызова функции pthread_cond_broadcast или pthread_cond_signal, вернется из вызванной им функции pthread_cond_wait или pthread_cond_timedwait, этот поток получит мьютекс, с которым была вызвана функция pthread_cond_wait или pthread_cond_timedwait. Разблокированные потоки будут состязаться за мьютекс в соответствии с их стратегией планирования (если это имеет смысл), как будто каждый из них вызвал функцию pthread_mutex_lock .

Функции pthread_cond_broadcast и pthread_cond_signal могут быть вызваны потоком, владеющим (или нет) в данный момент мьютексом. При этом потоки, вызвавшие функцию pthread_cond_wait или pthread_cond_timedwait , связали во время ожидания этот мьютекс с условной переменной. Однако, если необходимо обеспечить прогнозируемое поведение, этот мьютекс может быть заблокирован потоком, вызвавшим функцию pthread_cond_broadcast или pthread_cond_signal .

Функции pthread_cond_broadcast и pthread_cond_signal не будут иметь результата, если в данный момент не су щ ествует потоков, заблокированных с использованием условной переменной, за д анной параметром cond.

Возвращаемые значения

При успешном завершении функции pthread_cond_broadcast и pthread_ cond_signal возвра щ ают нулевое значение; в противном случае — ко д ошибки, обозначаю щ ий ее характер.

pthread_cond_broadcast, pthread_cond_signal — функции разблокировки потоков, заблокированных с по м о щ ью пере м енной условия.

Синопсис

THR

#include <pthread.h>

int pthread_cond_broadcast (pthread_cond_t *cond);

int pthread_cond_signal (pthread_cond_t *cond);

|Ошибки

Функции pthread_cond_broadcast и pthread_cond_signal м огут завершиться неудачно, если:

[EINVALJ значение, заданное параметром cond, не ссылается на инициализированную условную переменную.

Эти функции не возвращают код ошибки [EINTR].

Примеры

Отсутствуют.

Замечания по использованию

Функция pthread_cond_broadcast используется при изменении состояния общей переменной в ситуации, когда выполняется сразу несколько потоков. Рассмотрим задачу с участием одного «изготовителя» и нескольких «потребителей», в которой «изготовитель» может вставить в список несколько элементов, к которым могут получать доступ «потребители» (по одному элементу за раз). Путем вызова функции pthread_cond_broadcast «изготовитель» уведомляет о своем действии всех «потребителей», которые, возможно, находятся в состоянии ожидания, и, таким образом, при использовании мультипроцессора приложение может достичь более высокой пропускной способности. Кроме того, функция pthread_cond_broadcast позволяет упростить реализацию блокировки чтения-записи. Функция pthread_cond_broadcast весьма полезна, когда записывающий поток освобождает блокировку, и нужно «запустить» все «читающие» потоки, находящиеся в состоянии ожидания. Наконец, эту широковещательную функцию можно использовать в двухфазном алгоритме фиксации для уведомления всех клиентов о предстоящей фиксации транзакции.

  • Читать дальше
  • 1
  • ...
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: