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

swift – DispatchSemaphore是NSLock的一个很好的替代品吗?,第1张

概述我一直在使用NSLocks同步敏感的代码部分,但由于它们必须从锁定它们的同一个线程中解锁而一直遇到问题.然后我发现GCD的DispatchSemaphores似乎做了同样的事情,增加了方便性,可以从任何线程发出信号.不过,我想知道,如果这种便利是以线程安全为代价的.更换是否可取 let lock = NSLock()lock.lock()// do things...lock.unlock( 我一直在使用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/

总结

以上是内存溢出为你收集整理的swift – DispatchSemaphore是NSLock的一个很好的替代品吗?全部内容,希望文章能够帮你解决swift – DispatchSemaphore是NSLock的一个很好的替代品吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1018452.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存