【发布时间】:2017-04-18 09:39:06
【问题描述】:
我一直在使用NSLocks 来同步敏感的代码部分,但由于必须从锁定它们的同一线程解锁它们而遇到问题。然后我发现 GCD 的 DispatchSemaphores 似乎做同样的事情,增加了可以从任何线程发出信号的便利。不过,我想知道这种便利是否是以线程安全为代价的。是否可以更换
let lock = NSLock()
lock.lock()
// do things...
lock.unlock()
与
let semaphore = DispatchSemaphore(value: 1)
semaphore.wait()
// do things...
semaphore.signal()
还是我会遇到关于线程安全的问题?
【问题讨论】:
-
仍然没有得到答案,但我更喜欢使用信号量的另一个原因是即使它们没有“锁定”,也可以安全地“解锁”它们。
-
DispatchSemaphore有一个缺陷——它从 iOS10.0 开始可用。 -
@kelin 在文档中有 iOS 8.0 developer.apple.com/documentation/dispatch/dispatchsemaphore
标签: swift concurrency swift3