Выполнение условия

Выполнение условия

Штатным способом разблокирования потока, блокированного на условной переменной, является вызов функции, сигнализирующей о выполнении условия. В native API это функция SyncCondvarSignal(), которая имеет две POSIX-обертки: pthread_cond_signal() и pthread_cond_broadcast(). Разница между ними заключается в том, что первая пробуждает только один, самый приоритетный поток из ждущих выполнения условия, а вторая пробуждает все потоки, ожидающие выполнения условия.

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

Нештатным способом завершения ожидания на условной переменной может быть приход немаскированного сигнала UNIX. Если для данного сигнала определен обработчик, он выполнится без захвата мьютекса, а попытка захвата будет произведена уже после его завершения.

Выполнение условия для единичного потока

int pthread_cond_signal(pthread_cond_t* cond);

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

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

EOK — успешное завершение;

EFAULT — произошла ошибка при попытке обращения к указателям cond или mutex;

EINVAL — не инициализирована переменная, на которую указывает cond.

Выполнение условия для всех ожидающих потоков

int pthread_cond_broadcast(pthread_cond_t* cond);

Вызов функции разблокирует все потоки, блокированные на условной переменной cond. Потоки разблокируются в порядке приоритетов. Для потоков равного приоритета разблокирование проводится в порядке FIFO.

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

EOK — успешное завершение;

EFAULT — произошла ошибка при попытке обращения к указателям cond или mutex;

EINVAL — не инициализирована переменная, на которую указывает cond.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Начальные условия

Из книги Модель зрелости процессов разработки программного обеспечения автора Паулк Марк

Начальные условия Некоторые группы ключевых процессов содержат ключевые практики, отражающие потребность в начальных условиях. Так, например, для «Отслеживания хода проекта и контроля над ним» начальным условием является план разработки ПО. В некоторых случаях


Предварительные условия

Из книги Iptables Tutorial 1.1.19 автора Andreasson Oskar

Предварительные условия Данное руководство предполагает наличие у читателя начальных сведений о Linux/Unix, языке сценариев командной оболочки. Кроме того, вы должны знать – как пересобрать ядро операционной системы и иметь некоторое представление о его внутреннем


4.1 Необходимые условия для тестирования

Из книги Пакеты программ. Требования к качеству и тестирование автора Автор неизвестен

4.1 Необходимые условия для тестирования 4.1.1 Наличие компонентов продукта Для тестирования пакета программ должны иметься в наличии все его поставляемые компоненты (см. 3.1.2 h), а также нормативные документы, указанные в описании продукта (см. 3.1.2


R.5.16 Операция условия

Из книги Справочное руководство по C++ автора Страустрап Бьярн

R.5.16 Операция условия выражение-условия: логическое-выражение-ИЛИ логическое-выражение-ИЛИ ? выражение : выражение-условияУсловные выражения выполняются слева направо. Первое выражение должно быть арифметического типа или типа указателя. Оно вычисляется, и, если


Сильные и слабые условия

Из книги Основы объектно-ориентированного программирования автора Мейер Бертран

Сильные и слабые условия Понятия "сильнее" и "слабее" пришли из логики. Говорят, что P1 сильнее, чем P2, а P2 слабее, чем P1, если P1 влечет P2 и они не эквивалентны. Каждое утверждение влечет True, и из False следует все что угодно. Можно говорить, что True является слабейшим, а False


5.2.8. Условия и драйверы

Из книги MySQL: руководство профессионала автора Паутов Алексей В

5.2.8. Условия и драйверы Некоторые условия могут требовать специфической обработки. Эти условия могут касаться ошибок или общего управления потоком данных внутри


if - Выполнение или не выполнение предложений в зависимости от условий

Из книги Справочник по Flash автора Коллектив авторов

if - Выполнение или не выполнение предложений в зависимости от условий ifПозволяет выполнить или не выполняет определенные предложения в зависимости от заданного условияСинтаксис:if (condition) { statements}Аргументы:В целом, предложение if завершается закрывающей фигурной скобкой


Условия насыщения

Из книги OrCAD PSpice. Анализ электрических цепей автора Кеоун Дж.

Условия насыщения Необходимо предварительное замечание перед исследованием условий смещения, приводящих к насыщению транзистора. Из теоретического курса, посвященного изучению транзисторов, вы должны вспомнить, что значения hFE в активной области и в области насыщения


Ожидание условия

Из книги QNX/UNIX [Анатомия параллелизма] автора Цилюрик Олег Иванович

Ожидание условия Простое ожиданиеint pthread_cond_wait(pthread_cond_t* cond, pthread_mutex_t* mutex);Вызов функции блокирует вызвавший поток на условной переменной cond и разблокирует мьютекс mutex. Поток блокируется до тех пор, пока другой поток не вызовет функцию разблокирования на условной


Условия CHECK

Из книги Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ автора Борри Хелен


Условия поиска

Из книги Язык Си - руководство для начинающих автора Прата Стивен

Условия поиска Возможность конструировать "формулы" для задания условий поиска при выборе наборов, локализации строк при изменениях и удалениях, а также применение правил для создания входных данных является фундаментальной характеристикой языка запросов. Выражения


Условия поиска и упорядочивания

Из книги HTML, XHTML и CSS на 100% автора Квинт Игорь

Условия поиска и упорядочивания Обратите внимание в предыдущем примере, что условия поиска возможны в каждой объединяемой спецификации SELECT. Они являются обычными выражениями поиска, которые должны соответствовать объединяемому набору, управляемому текущим выражением


Условия для изменения OIT и OAT

Из книги автора

Условия для изменения OIT и OAT Каждый раз, когда сервер стартует другую транзакцию, он проверяет состояние идентификаторов транзакций, которые он хранит в TSB, удаляя те, чье состояние было изменено на "подтвержденное", и заново вычисляет значения OIT и OAT. Он сравнивает их с


ОПЕРАЦИЯ УСЛОВИЯ: ?:

Из книги автора

ОПЕРАЦИЯ УСЛОВИЯ: ?:      В языке Си имеется короткий способ записи одного из видов оператора if-else. Он называется "условным выражением" и использует операцию условия - ?:. Эта операция состоит из двух частей и содержит три операнда. Ниже приводится пример оператора с помощью


11.4. Условия и циклы

Из книги автора

11.4. Условия и циклы Редко какая-либо программа или сценарий имеют линейный алгоритм. Обычно в ходе работы часто проверяются различные условия и в зависимости от результата принимаются какие-то решения. Для автоматизации работы в коде также используются циклы, которые