Сравнение спин-блокировок и семафоров

Сравнение спин-блокировок и семафоров

Понимание того, когда использовать спин-блокировки, а когда семафоры является важным для написания оптимального кода. Однако во многих случаях выбирать очень просто. В контексте прерывания могут использоваться только спин-блокировки, и только семафор может удерживаться процессом, который находится в состоянии ожидания. В табл. 9.6 показан обзор требований того, какой тип блокировок использовать.

Таблица 9.6. Что следует использовать: семафоры или спин-блокировки

Требование Рекомендуемый тип блокировки
Блокировка с малыми накладными затратами (low overhead) Спин-блокировки более предпочтительны
Малое время удержания блокировки Спин-блокировки более предпочтительны
Длительное время удержания блокировки Семафоры более предпочтительны
Необходимо использовать блокировку в контексте прерывания Необходима спин-блокировка
Необходимо переходить в состояние ожидания (steep) при захваченной блокировке Необходимо использовать семафоры
Поделитесь на страничке

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

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

Исключение конфликтов блокировок

Из книги UNIX: взаимодействие процессов автора Стивенс Уильям Ричард

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


Настройка спин-счетчика

Из книги Системное программирование в среде Windows автора Харт Джонсон М

Настройка спин-счетчика Обычно, если в результате выполнения функции EnterCriticalSection поток обнаруживает, что объект CS уже принадлежит другому потоку, он входит в ядро и остается блокированным до тех пор, пока не освободится объект CRITICAL_SECTION, что требует определенного времени.


Установка значений спин-счетчиков

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

Установка значений спин-счетчиков Спин-счетчики CS могут устанавливаться на стадии инициализации объектов CS или динамическим путем. В первом случае функция InitializeCriticalSection заменяется функцией InitializeCriticalSectionAndSpinCount, в которой добавлен параметр счетчика. В то же время,


Использование блокировок чтения/записи

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

Использование блокировок чтения/записи Построим приложение, использующее блокировку чтения/записи (файл sy10.cc):Эффективность блокировки чтения/записи#include <sys/syspage.h>#include <sys/neutrino.h>#include <list>// сколь угодно сложные элементы внутренней базы данных// приложения; в


Способ разрешения блокировок ("Режим блокировок")

Из книги Linux программирование в примерах автора Роббинс Арнольд

Способ разрешения блокировок ("Режим блокировок") Способ разрешения блокировок определяет поведение транзакции в случае, когда она пытается отправить изменение, которое конфликтует с изменением, уже отправленным другой транзакцией. Значениями являются WAIT и NOWAIT.WAITWAIT (по


Блокировки и конфликты блокировок

Из книги Новый ум короля [О компьютерах, мышлении и законах физики] автора Пенроуз Роджер

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


ГЛАВА 40. Менеджер блокировок.

Из книги Разработка ядра Linux автора Лав Роберт

ГЛАВА 40. Менеджер блокировок. Блокировки используются в многопользовательских средах для синхронизации работы и предотвращения разрушения целостности процессов работой других процессов. Firebird использует как средства блокировки операционной системы, так и собственный


Менеджер блокировок Firebird

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

Менеджер блокировок Firebird В Суперсервере о Менеджере блокировок можно думать как об отдельном "управляющем центре", с которым договариваются транзакции о приобретении прав на выполнение запросов. Менеджер блокировок включает в себя фрагмент памяти и некоторые


Таблица блокировок

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

Таблица блокировок Менеджер блокировок управляет таблицей блокировок для координации совместного использования ресурсов в клиентских потоках. Информация, предоставляемая здесь, может быть полезной при попытках исправить ситуации взаимных блокировок, например;* все в


14.2.2.2. Установка и снятие блокировок

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

14.2.2.2. Установка и снятие блокировок После заполнения структуры struct flock следующим шагом является запрос блокировки. Этот шаг осуществляется с помощью соответствующего значения аргумента cmd функции fcntl():F_GETLK   Узнать, можно ли установить блокировку.F_SETLK   Установить или


14.2.2.3. Предостережения по поводу блокировок

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

14.2.2.3. Предостережения по поводу блокировок Имеется несколько предостережений, о которых нужно знать при блокировках файлов:• Как описано ранее, вспомогательная блокировка является именно этим. Не взаимодействующий процесс может делать все, что хочет, за спиной (так


Спин-блокировки

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

Спин-блокировки Было бы очень хорошо, если бы все критические участки были такие же простые, как инкремент или декремент переменной, однако в жизни все более серьезно. В реальной жизни критические участки могут включать в себя несколько вызовов функций. Например, очень


Другие средства работы со спин-блокировками

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

Другие средства работы со спин-блокировками Функция spin_lock_init() используется для инициализации спин-блокировок, которые были созданы динамически (переменная типа spinlock_t, к которой нет прямого доступа, а есть только указатель на нее).Функция spin_try_lock() производит попытку


Спин-блокировки чтения-записи

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

Спин-блокировки чтения-записи Иногда в соответствии с целью использования блокировок их можно разделить два типа — блокировки чтения (reader lock) и блокировки записи (writer lock). Рассмотрим некоторый список, который может обновляться и в котором может выполняться поиск. Когда