gpt4 book ai didi

swift - DispatchSemaphore 是 NSLock 的良好替代品吗?

转载 作者:IT王子 更新时间:2023-10-29 05:52:21 26 4
gpt4 key购买 nike

我一直在使用 NSLock 来同步敏感的代码部分,但一直遇到问题,因为它们必须从锁定它们的同一线程解锁。然后我发现 GCD 的 DispatchSemaphore 似乎在做同样的事情,而且更方便的是它们可以从任何线程发出信号。不过,我想知道这种便利是否是以线程安全为代价的。是否建议更换

let lock = NSLock()
lock.lock()
// do things...
lock.unlock()

let semaphore = DispatchSemaphore(value: 1)
semaphore.wait()
// do things...
semaphore.signal()

还是我会遇到有关线程安全的问题?

最佳答案

是的,它们具有相同的功能,都是处理生产者-消费者问题。

如果相应配置,信号量允许多个线程访问共享资源。您可以在同一个并发 dispatchQueue 中执行 block 。

{
semaphore.wait()
// do things...
semaphore.signal()
}

实际上这同样适用于 Lock,如果您只希望一个线程以并发方式一次访问资源。

我发现这很有用:https://priteshrnandgaonkar.github.io/concurrency-with-swift-3/

关于swift - DispatchSemaphore 是 NSLock 的良好替代品吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43468647/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com