Другие средства работы со спин-блокировками
Другие средства работы со спин-блокировками
Функция 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() Возвратить ненулевое значение, если указанная блокировка в данный момент захвачена, и нулевое значение в противном случае