加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读