Крейт lock
Источник: Документация async-lock
Асинхронные примитивы синхронизации.
Этот крейт предоставляет следующие примитивы:
Barrier- позволяет задачам синхронизироваться всем вместе одновременноMutex- мьютекс (взаимное исключение)RwLock- блокировка читатель-писатель, позволяющая любое количество читателей или одного писателяSemaphore- ограничивает количество одновременных операций
Связь с std::sync
В общем случае следует рассмотреть использование типов std::sync вместо типов из этого крейта.
Есть два основных случая использования типов из этого крейта:
- Вам нужно использовать примитив синхронизации в среде
no_std - Вам нужно удерживать блокировку через точку
.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 | Владеющий охранник, который освобождает полученное разрешение |