Разработка ядра Linux
Шрифт:
Использование семафоров
Функция
Функция
Для освобождения захваченного семафора необходимо вызвать функцию
Полный список функций работы с семафорами приведен в табл. 9.5.
Таблица 9.5. Список функций работы с семафорами
| Функция | Описание |
|---|---|
sema_init(struct semaphore*, int) | Инициализация динамически созданного семафора и установка для него указанного значения счетчика использования |
init_MUTEX(struct semaphore*) | Инициализация динамически созданного семафора и установка его счетчика использования в значение 1 |
init_MUTEX_LOCKED (struct semaphore*) | Инициализация динамически созданного семафора и установка его счетчика использования в значение 0 (т.е. семафор изначально заблокирован) |
down_interruptible(struct semaphore *) | Выполнить попытку захватить семафор и перейти в прерываемое состояние ожидания, если семафор находится в состоянии конфликта при захвате (contended) |
down(struct semaphore*) | Выполнить попытку захватить семафор и перейти в непрерываемое состояние ожидания, если семафор находится в состоянии конфликта при захвате (contended) |
down_trylock(struct semaphore*) | Выполнить попытку захватить семафор и немедленно возвратить ненулевое значение, если семафор находится в состоянии конфликта при захвате (contended) |
up(struct semaphore*) | Освободить указанный семафор и возвратить к выполнению ожидающее задание, если такое есть |
Семафоры чтения-записи
Семафоры,
Семафоры чтения-записи представляются с помощью структуры
где
Семафоры чтения-записи, которые создаются динамически, могут быть инициализированы с помощью следующей функции.
Все семафоры чтения-записи являются взаимоисключающими (mutex), т.е. их счетчик использования равен единице. Любое количество потоков чтения может одновременно удерживать блокировку чтения, если при этом нет ни одного потока записи. И наоборот, только один поток записи может удерживать блокировку, захваченную на запись, если нет ни одного потока чтения. Все семафоры чтения-записи используют непрерываемое состояние ожидания, поэтому существует только одна версия функции
Для семафоров есть реализации функций
Семафоры чтения-записи имеют уникальную функцию, аналога которой нет для спин-блокировок чтения-записи. Это функция
Семафоры чтения-записи, так же как и спин-блокировки аналогичного типа, должны использоваться, только если есть четкое разделение между участками кода, которые осуществляют чтение, и участками кода, которые осуществляют запись. Использование механизмов блокировок чтения-записи приводит к дополнительным затратам, поэтому их стоит использовать, только если код можно четко разделить на участки чтения и записи.
Сравнение спин-блокировок и семафоров
Понимание того, когда использовать спин-блокировки, а когда семафоры является важным для написания оптимального кода. Однако во многих случаях выбирать очень просто. В контексте прерывания могут использоваться только спин-блокировки, и только семафор может удерживаться процессом, который находится в состоянии ожидания. В табл. 9.6 показан обзор требований того, какой тип блокировок использовать.
Таблица 9.6. Что следует использовать: семафоры или спин-блокировки
Я все еще граф. Книга IX
9. Дорогой барон!
Фантастика:
боевая фантастика
попаданцы
аниме
рейтинг книги
Французская новелла XX века. 1900–1939
Проза:
классическая проза
рейтинг книги
Чужак из ниоткуда 2
2. Чужак из ниоткуда
Фантастика:
попаданцы
альтернативная история
рейтинг книги
Бастард
1. Последняя жизнь
Фантастика:
фэнтези
героическая фантастика
попаданцы
рейтинг книги
Потомок бога 3
3. Локки
Фантастика:
аниме
фэнтези
рейтинг книги
Последний Паладин. Том 4
4. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
рейтинг книги
Ермак. Телохранитель
2. Ермак
Фантастика:
альтернативная история
рейтинг книги
Последний Герой. Том 2
2. Последний герой
Фантастика:
попаданцы
альтернативная история
рейтинг книги
Снайпер
3. Жнец
Фантастика:
боевая фантастика
попаданцы
рейтинг книги
Наследник
1. Рюрикова кровь
Фантастика:
научная фантастика
попаданцы
альтернативная история
рейтинг книги