TGViewer
EasySwift iOS🍏 EasySwift iOS🍏 @swift_ioss · 2.82K subscribers
Post #802 681
How Do You Build a Mutex That Works with async/await ?

🔍 Автор столкнулся с задачей запретить одновременный запуск async метода и показал, почему ни actor, ни Mutex не подходят. Решение - библиотека TaskGate (AsyncGate и AsyncRecursiveGate): это асинхронный «турникет», который допускает только одну задачу внутрь и при этом безопасно позволяет await внутри секции.

❓ Внутреннее состояние - два состояния (.unlocked и .locked(queue)) и простой NSLock для защиты этих маленьких синхронных обновлений. Первая задача просто «заходит» и оставляет дверь закрытой; последующие регистрируют свою continuation как билет в очередь и «паркуются» без блокировки потока. Когда владелец выходит, он не открывает ворота всем сразу, а передаёт продолжение следующему - handoff, честная FIFO-очередь, никакой толкучки.

✔️ Этот подход подход даёт нужную семантику асинхронной взаимной исключённости и решает проблему priority inversion — при поддержке ОС библиотека эскалирует приоритеты ожидающих задач, прокидывая bump по очереди.

❌ Из минусов - AsyncGate не Sendable и предназначен жить в одном акторе (во избежание ошибок), а вход в тот же gate из той же задачи приведёт к дедлоку - для этого есть AsyncRecursiveGate.
  • 👍 3
More from @swift_ioss
  1. Oct 9, 2026TLS certificate validation on iOS ℹ️ Если вы не знаете, что такое TLS и проверка сертифика…
  2. Oct 7, 2026Rich Push Notifications в iOS: Notification Service Extension, Notification Content Extens…
  3. Oct 5, 2026Применение gRPC при разработке приложений под iOS ❓ Хороший туториал по gRPC. В целом расс…
  4. Oct 2, 2026Letting AI See SwiftUI: Xcode Preview MCP in Practice — Pitfalls and Hopes 🆕 В Xcode 26.3…
  5. Sep 30, 2026Backporting SwiftUI APIs ❓ Как безопасно «доделать» новые SwiftUI API из iOS 27.1 для стар…
  6. Sep 28, 2026Post #814
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →