# Sync 并发工具 > 当前的结构化并发调度上约等于OperationQueue, 没有同Go一般的强占式调度。因此许多基于线程的旧操作都存在问题。 > > 为了更愉快地异步乱飞, 参考Go瞎折腾一些工具。 ## Mutex 互斥锁 ```swift public func lock() async public func unlock() public func tryLock() -> Bool ``` 公平调度偷懒, 饥饿模式摆烂\_(ˊཀˋ」∠)_ ## Channel 约等于`AsyncStream`, 没有实现缓冲区限制 相比原版取数据操作加了锁, 避免了部分情况下的奇怪阻塞/死锁, iOS更新后奇怪的阻塞/死锁问题消失了!? 在没有读请求的情况下可以不主动close ```swift public init() public func close() public func push(_ v: T) public func byPop() async -> T? ``` ## Semaphore 信号量, 当前实现过丑, 重写待定 ## RWMutex 读写锁, 虽然有`Actor`, 但是系统内部的调度过于差劲 开发待定 ## NoMainActor ```swift Task { @NoMainActor in print("x") } ``` 阻止Task被分配至主线程 ## withTimeout ``` public func withTimeout(_ ms: Int, priority: TaskPriority = .medium, operation: @escaping @Sendable () async throws -> T) async throws -> T where T : Sendable ``` 超时取消