Книга: Разработка ядра Linux

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

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

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

Функция spin_try_lock() производит попытку захватить указанную спин-блокировку. Если блокировка находится в состоянии конфликта, то, вместо циклической проверки и ожидания на освобождение блокировки, эта функция возвращает ненулевое значение. Если блокировка была захвачена успешно, то функция возвращает нуль. Аналогично функция spin_is_locked() возвращает ненулевое значение, если блокировка в данный момент захвачена. В противном случае возвращается нуль. Эта функция никогда не захватывает блокировку[48].

В табл. 9.3 приведен полный список функций работы со спин-блокировками.

Таблица 9.3. Список функций работы со спин-блокировками

Функция Описание
spin_lock() Захватить указанную блокировку
spin_lock_irq() Запретить прерывания на локальном процессоре и захватить указанную блокировку
spin_lock_irqsave() Сохранить текущее состояние системы прерываний, запретить прерывания на локальном процессоре и захватить указанную блокировку
spin_unlock() Освободить указанную блокировку
spin_unlock_irq() Освободить указанную блокировку и разрешить прерывания на локальном процессоре
spin_unlock_irqrestore() Освободить указанную блокировку и восстановить состояние системы прерываний на локальном процессоре в указанное первоначальное значение
spin_lock_init() Инициализировать объект типа spinlock_t в заданной области памяти
spin_trylock() Выполнить попытку захвата указанной блокировки и в случае неудачи возвратить ненулевое значение
spin_is_locked() Возвратить ненулевое значение, если указанная блокировка в данный момент захвачена, и нулевое значение в противном случае

Оглавление книги


Генерация: 1.068. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз