私は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'には1つの欠陥があります。これはiOS10.0から利用可能です。 – kelin