swift – DispatchSemaphore是NSLock的一个很好的替代品吗?
发布时间:2020-12-14 05:00:59 所属栏目:百科 来源:网络整理
导读:我一直在使用NSLocks同步敏感的代码部分,但由于它们必须从锁定它们的同一个线程中解锁而一直遇到问题.然后我发现GCD的DispatchSemaphores似乎做了同样的事情,增加了方便性,可以从任何线程发出信号.不过,我想知道,如果这种便利是以线程安全为代价的.更换是否
我一直在使用NSLocks同步敏感的代码部分,但由于它们必须从锁定它们的同一个线程中解锁而一直遇到问题.然后我发现GCD的DispatchSemaphores似乎做了同样的事情,增加了方便性,可以从任何线程发出信号.不过,我想知道,如果这种便利是以线程安全为代价的.更换是否可取
let lock = NSLock() lock.lock() // do things... lock.unlock() 同 let semaphore = DispatchSemaphore(value: 1) semaphore.wait() // do things... semaphore.signal() 或者我会遇到有关线程安全的问题吗? 解决方法
是的,它们具有相同的功能,既可以解决生产者 – 消费者问题.
如果相应配置,则信号量允许多个线程访问共享资源.您可以在同一个并发dispatchQueue中执行块. {semaphore.wait() // do things... semaphore.signal()} 实际上同样适用于Lock,如果您只希望一个线程以并发方式一次触摸资源. 我发现这有用:https://priteshrnandgaonkar.github.io/concurrency-with-swift-3/ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |