微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

swift – DispatchSemaphore是NSLock的一个很好的替代品吗?

我一直在使用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/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐