Mutex: замок, который больше не нужно писать руками ✅

🔒 Mutex — примитив взаимного исключения из стандартной библиотеки, который владеет защищаемым значением. import Synchronization, хранить в let — и всё.

⚠️ Первое: это Swift 6.0 (SE-0433), а не 5.9. Доступность — macOS 15, iOS 18, watchOS 11, visionOS 2, плюс Linux и Windows.

⚠️ Второе, что почти всегда пишут лишним: @unchecked Sendable здесь не нужен. Mutex конформит Sendableбезусловно, так что final class, у которого единственное хранимое свойство — let Mutex<Int>, конформит обычному Sendable сам. Три вещи, о которых стоит знать. Mutex обязан быть let, никогда var — он помечен @_staticExclusiveOnly, чтобы не тащить динамическую проверку эксклюзивности. Тело withLock не асинхронное, поэтому await внутри — ошибка компиляции, а не рантайм-ловушка; именно поэтому в API вообще нет голых lock()/unlock(): точка приостановки могла бы возобновиться на другом потоке. И он не рекурсивный: вложенный withLock — поведение, зависящее от платформы (паника, дедлок или неопределённость), повторного захвата не будет никогда.

💡 Порядок выбора: для большинства кода приложения актор лучше — он безопаснее и проще. Mutex берут, когда нужен точный контроль или актор оказывается слишком крупной гранулой.

#Swift #SwiftConcurrency #ThreadSafety #Mutex #iOSDevelopment

Mutex: замок, который больше не нужно писать руками ✅ | Сетка — социальная сеть от hh.ru