首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DispatchSemaphore是NSLock的好替代品吗?

DispatchSemaphore是NSLock的好替代品吗?
EN

Stack Overflow用户
提问于 2017-04-18 09:39:06
回答 1查看 5.9K关注 0票数 15

我一直在使用NSLock来同步代码中敏感的部分,但由于必须从锁定它们的线程中解锁,所以一直遇到问题。然后,我发现GCD的DispatchSemaphore似乎也在做同样的事情,并增加了从任何线程发出信号的方便性。不过,我想知道,这种便利是否是以线程安全为代价的。是否应该替换

代码语言:javascript
复制
let lock = NSLock()
lock.lock()
// do things...
lock.unlock()

使用

代码语言:javascript
复制
let semaphore = DispatchSemaphore(value: 1)
semaphore.wait()
// do things...
semaphore.signal()

或者我会遇到有关线程安全的问题吗?

EN

回答 1

Stack Overflow用户

发布于 2018-07-13 14:20:23

自从提出这个问题以来,我主要转向了另一种锁定代码块的方法:串行分派队列。我就是这样用的:

代码语言:javascript
复制
let queue = DispatchQueue(label: "<your label here>")
queue.async {
    // do things...
}

默认情况下,队列是串行的,这意味着它充当当块退出时释放的锁。因此,如果您需要锁定一个异步操作,这是不合适的,但在大多数情况下,它是一种魅力。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43468647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档