Появились незапирающиеся варианты Mutex и RwLock

29.07.2025

Реализованы фичи sync_nonpoison и nonpoison_mutex: мьютексы и блокировки чтения-записи, которые не ставят признак отравления при панике во владении. Полезно там, где паника в одном потоке не означает, что защищённые данные испорчены.

Зачем

Обычный Mutex после паники во владении блокировкой помечается отравленным: следующий, кто попытается её взять, получит ошибку PoisonError. Логика верная, когда паника могла оставить данные в промежуточном состоянии, — но когда состояние гарантированно целое (например, паника возникла в коде проверки, а не в мутации), отравление становится наказанием за чужую ошибку и вынуждает разворачивать всю логику обработки.

Новые типы просто не отравляются. Это не ослабляет обычный Mutex: выбор остаётся за разработчиком и делается явно.

Модуль sync::nonpoison::mutex повторяет по составу существующий poison::mutex, вместе с ним перенесены нестабильные возможности вроде mapped_lock_guards и mutex_data_ptr. Фичи нестабильны, отслеживание — rust-lang/rust#134645. Автор — Connor Ostrander.

Оригинал

Implementation: #[feature(sync_nonpoison)], #[feature(nonpoison_mutex)]

Упоминаний: 1 · Просмотров: 3