我一直在使用NSLock
s来同步敏感的代码部分,但由于它们必须从锁定它们的同一个线程中解锁而一直遇到问题.然后我发现GCD DispatchSemaphore
似乎做了同样的事情,增加了方便性,可以从任何线程发出信号.不过,我想知道,如果这种便利是以线程安全为代价的.更换是否可取
let lock = NSLock() lock.lock() // do things... lock.unlock()
同
let semaphore = DispatchSemaphore(value: 1) semaphore.wait() // do things... semaphore.signal()
或者我会遇到有关线程安全的问题吗?