Выполнение условия
Выполнение условия
Штатным способом разблокирования потока, блокированного на условной переменной, является вызов функции, сигнализирующей о выполнении условия. В 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.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
11.4. Условия и циклы
11.4. Условия и циклы Редко какая-либо программа или сценарий имеют линейный алгоритм. Обычно в ходе работы часто проверяются различные условия и в зависимости от результата принимаются какие-то решения. Для автоматизации работы в коде также используются циклы, которые
Ожидание условия
Ожидание условия Простое ожиданиеint pthread_cond_wait(pthread_cond_t* cond, pthread_mutex_t* mutex);Вызов функции блокирует вызвавший поток на условной переменной cond и разблокирует мьютекс mutex. Поток блокируется до тех пор, пока другой поток не вызовет функцию разблокирования на условной
if - Выполнение или не выполнение предложений в зависимости от условий
if - Выполнение или не выполнение предложений в зависимости от условий ifПозволяет выполнить или не выполняет определенные предложения в зависимости от заданного условияСинтаксис:if (condition) { statements}Аргументы:В целом, предложение if завершается закрывающей фигурной скобкой
Предварительные условия
Предварительные условия Данное руководство предполагает наличие у читателя начальных сведений о Linux/Unix, языке сценариев командной оболочки. Кроме того, вы должны знать – как пересобрать ядро операционной системы и иметь некоторое представление о его внутреннем
Условия насыщения
Условия насыщения Необходимо предварительное замечание перед исследованием условий смещения, приводящих к насыщению транзистора. Из теоретического курса, посвященного изучению транзисторов, вы должны вспомнить, что значения hFE в активной области и в области насыщения
Начальные условия
Начальные условия Некоторые группы ключевых процессов содержат ключевые практики, отражающие потребность в начальных условиях. Так, например, для «Отслеживания хода проекта и контроля над ним» начальным условием является план разработки ПО. В некоторых случаях
R.5.16 Операция условия
R.5.16 Операция условия выражение-условия: логическое-выражение-ИЛИ логическое-выражение-ИЛИ ? выражение : выражение-условияУсловные выражения выполняются слева направо. Первое выражение должно быть арифметического типа или типа указателя. Оно вычисляется, и, если
5.2.8. Условия и драйверы
5.2.8. Условия и драйверы Некоторые условия могут требовать специфической обработки. Эти условия могут касаться ошибок или общего управления потоком данных внутри
ОПЕРАЦИЯ УСЛОВИЯ: ?:
ОПЕРАЦИЯ УСЛОВИЯ: ?: В языке Си имеется короткий способ записи одного из видов оператора if-else. Он называется "условным выражением" и использует операцию условия - ?:. Эта операция состоит из двух частей и содержит три операнда. Ниже приводится пример оператора с помощью
Условия поиска
Условия поиска Возможность конструировать "формулы" для задания условий поиска при выборе наборов, локализации строк при изменениях и удалениях, а также применение правил для создания входных данных является фундаментальной характеристикой языка запросов. Выражения
Условия поиска и упорядочивания
Условия поиска и упорядочивания Обратите внимание в предыдущем примере, что условия поиска возможны в каждой объединяемой спецификации SELECT. Они являются обычными выражениями поиска, которые должны соответствовать объединяемому набору, управляемому текущим выражением
Условия для изменения OIT и OAT
Условия для изменения OIT и OAT Каждый раз, когда сервер стартует другую транзакцию, он проверяет состояние идентификаторов транзакций, которые он хранит в TSB, удаляя те, чье состояние было изменено на "подтвержденное", и заново вычисляет значения OIT и OAT. Он сравнивает их с
4.1 Необходимые условия для тестирования
4.1 Необходимые условия для тестирования 4.1.1 Наличие компонентов продукта Для тестирования пакета программ должны иметься в наличии все его поставляемые компоненты (см. 3.1.2 h), а также нормативные документы, указанные в описании продукта (см. 3.1.2
Сильные и слабые условия
Сильные и слабые условия Понятия "сильнее" и "слабее" пришли из логики. Говорят, что P1 сильнее, чем P2, а P2 слабее, чем P1, если P1 влечет P2 и они не эквивалентны. Каждое утверждение влечет True, и из False следует все что угодно. Можно говорить, что True является слабейшим, а False