4
我一直在使用NSLock
來同步代碼的敏感部分,但由於它們必須從它們被鎖定的同一線程中解鎖,所以一直存在問題。然後我發現GCD的DispatchSemaphore
似乎做同樣的事情,增加了方便,他們可以從任何線程發出信號。不過,我想知道,如果這種便利是以線程安全的價格出現的話。它是建議與DispatchSemaphore是NSLock的一個很好的替代品嗎?
let semaphore = DispatchSemaphore(value: 1)
semaphore.wait()
// do things...
semaphore.signal()
更換
let lock = NSLock()
lock.lock()
// do things...
lock.unlock()
或者我會碰上關於線程安全問題呢?
仍然沒有得到答案,但另一個原因是我更願意用信號燈的是,它是安全的「解鎖」他們,即使他們沒有被「鎖定」 。 –
'DispatchSemaphore'有一個缺陷 - 從iOS10.0開始可用。 – kelin