我一直在使用NSLock
同步代码的敏感部分,但由于必须从锁定它们的同一线程中解锁它们而遇到了问题。然后我发现GCDDispatchSemaphore
s 似乎做同样的事情,并且可以从任何线程向它们发出信号,这增加了便利性。不过,我想知道这种便利是否是以线程安全为代价的。是否建议更换
let lock = NSLock()
lock.lock()
// do things...
lock.unlock()
with
let semaphore = DispatchSemaphore(value: 1)
semaphore.wait()
// do things...
semaphore.signal()
或者我会遇到有关线程安全的问题吗?
是的,它们具有相同的功能,都是处理生产者-消费者问题。
如果进行了相应配置,信号量允许多个线程访问共享资源。您可以在同一个并发调度队列中执行块。
{
semaphore.wait()
// do things...
semaphore.signal()
}
实际上,如果您只想让一个线程以并发方式同时接触资源,那么这同样适用于 Lock。
我发现这很有帮助:https://priteshrnandgaonkar.github.io/concurrency-with-swift-3/ https://priteshrnandgaonkar.github.io/concurrency-with-swift-3/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)