Java for Swift 是否有类似于 Reentrant Lock 的库?

is there a library similar to Reentrant Lock in Java for Swift?

我目前正在研究一个可以被多个线程使用的函数。问题是函数需要先完成并将结果存储在缓存中。与此同时,其他线程可能正在调用这个函数,我需要它们等待直到完成。我们能够在 Java 上使用 Reentrant Lock 完成此操作 swift 中是否有类似的库?我看到 NSRecursiveLock 接近我们正在尝试做的事情,但是,我们只想将其保留为 swift。我也看过多篇文章,比如这篇关于使用 GCD 的文章,但是,我相信这是针对类似但不同的内容:https://medium.com/@prasanna.aithal/multi-threading-in-ios-using-swift-82f3601f171c

提前致谢。

带锁的递归总是有点痛。一个干净的解决方案是将需要锁定的函数重构为获取锁定的外部 API 并转发到不获取锁定的内部 API。内部不要调用外部 API.

一个简单的示例可能是这样的(这几乎是 Swift 代码 - parameters 并且需要填写实际工作实现)

extension DispatchSemaphore
{
    func withLock<R>(_ block: () throws -> R) rethrows -> R
    {
        wait()
        defer { signal() }
        return try block()
    }
}

let myLock = DispatchSemaphore(value: 1)

func recursiveLockingFunction(parameters)
{
    func nonLockingFunc(parameters) {
        if /* some terminating case goes here */ {
             // Do the terminating case
             return
        }

        // Do whatever you need to do to handle the partial problem and 
        // and reduce the parameters
        nonLockingFunc(reducedParameters)
    }

    myLock.withLock { nonLockingFunc(parameters) }
}

这是否适用于您取决于您​​的设计,但如果唯一的问题是您要锁定的函数是递归的,则应该可行。而且它只使用GCD(DispatchSemaphore)来实现。