Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Крейт lock

Источник: Документация async-lock

Асинхронные примитивы синхронизации.

Этот крейт предоставляет следующие примитивы:

  • Barrier - позволяет задачам синхронизироваться всем вместе одновременно
  • Mutex - мьютекс (взаимное исключение)
  • RwLock - блокировка читатель-писатель, позволяющая любое количество читателей или одного писателя
  • Semaphore - ограничивает количество одновременных операций

Связь с std::sync

В общем случае следует рассмотреть использование типов std::sync вместо типов из этого крейта.

Есть два основных случая использования типов из этого крейта:

  1. Вам нужно использовать примитив синхронизации в среде no_std
  2. Вам нужно удерживать блокировку через точку .await (Удержание блокировки std::sync через .await сделает ваш фьючерс не-Send, а также с высокой вероятностью вызовет взаимные блокировки)

Если вы уже используете libstd и не удерживаете блокировки через точки await (существует Clippy lint под названием await_holding_lock, который выдает предупреждения для этого сценария), вам следует рассмотреть std::sync вместо этого крейта. Эти типы оптимизированы для текущей операционной системы, менее сложны и обычно намного быстрее.

В отличие от этого, система уведомлений async-lock использует std::sync::Mutex внутри, если включена функция std, и переходит к значительно более медленной стратегии, если она не включена. Таким образом, существует мало случаев, когда async-lock выигрывает в производительности по сравнению с std::sync.

Модули

МодульОписание
futuresИменованные фьючерсы для использования с примитивами async_lock

Структуры

СтруктураОписание
BarrierСчетчик для синхронизации нескольких задач одновременно
BarrierWaitResultВозвращается Barrier::wait(), когда все задачи вызвали его
MutexАсинхронный мьютекс
MutexGuardОхранник, который освобождает мьютекс при уничтожении
MutexGuardArcВладеющий охранник, который освобождает мьютекс при уничтожении
OnceCellОбласть памяти, в которую можно записать не более одного раза
RwLockАсинхронная блокировка читатель-писатель
RwLockReadGuardОхранник, который освобождает блокировку чтения при уничтожении
RwLockReadGuardArcВладеющий, подсчитывающий ссылки охранник, который освобождает блокировку чтения при уничтожении
RwLockUpgradableReadGuardОхранник, который освобождает улучшаемую блокировку чтения при уничтожении
RwLockUpgradableReadGuardArcВладеющий, подсчитывающий ссылки охранник, который освобождает улучшаемую блокировку чтения при уничтожении
RwLockWriteGuardОхранник, который освобождает блокировку записи при уничтожении
RwLockWriteGuardArcВладеющий, подсчитывающий ссылки охранник, который освобождает блокировку записи при уничтожении
SemaphoreСчетчик для ограничения количества одновременных операций
SemaphoreGuardОхранник, который освобождает полученное разрешение
SemaphoreGuardArcВладеющий охранник, который освобождает полученное разрешение