我正在使用 GCD 来了解信号量的正确实现细节,当 ( https://khanlou.com/2016/04/the-GCD-handbook/ ) 中的一个语句让我困惑时:“调用 .wait() 将阻塞线程,直到.signal() 被调用。这意味着 .signal() 必须从不同的线程调用,因为当前线程完全被阻塞。此外,你永远不应该从主线程调用 .wait(),而只能从后台线程调用。 ” 大多数信号量示例通常从同一队列调用等待和信号,这似乎也工作得很好。我在这里错过了什么吗?
// Pseudocode from: https://khanlou.com/2016/04/the-GCD-handbook/
// on a background queue
let semaphore = DispatchSemaphore(value: 0)
doSomeExpensiveWorkAsynchronously(completionBlock: {
semaphore.signal()
})
semaphore.wait()
//the expensive asynchronous work is now done
Run Code Online (Sandbox Code Playgroud) multithreading grand-central-dispatch ios swift dispatchsemaphore