当( https://khanlou.com/2016/04/the-GCD-handbook/ )的一条语句让我感到困惑时,我正在使用 GCD 浏览信号量的正确实现细节:“调用 .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