小编cod*_*rex的帖子

信号量等待和信号是否应该始终从单独的队列中调用?

我正在使用 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

3
推荐指数
1
解决办法
4359
查看次数