ios - Playground——DispatchQueue和DispatchSemaphore的关系

标签 ios swift semaphore dispatch gdc

我对 DispatchQueue 和 DispatchSemaphore 感到困惑。就像下面的例子:

let semaphore : DispatchSemaphore = DispatchSemaphore(value:1)
for i in 1...40 {
    DispatchQueue.global().async{
        semaphore.wait()
        NSLog("......1-%d",i)
        semaphore.signal()
    }
}

我认为它应该打印 1...40,实际上它只打印了大约 25,结果如下:

2016-11-18 19:05:38.786 MyPlayground[7436:495171] ......1-1
2016-11-18 19:05:38.787 MyPlayground[7436:495175] ......1-2
......
2016-11-18 19:05:38.797 MyPlayground[7436:495258] ......1-23
2016-11-18 19:05:38.797 MyPlayground[7436:495244] ......1-24

这是什么原因?

最佳答案

因为您正在异步运行它,所以 Playground 在所有 40 次迭代完成之前完成。将这两行添加到代码的开头或结尾:

import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true

关于ios - Playground——DispatchQueue和DispatchSemaphore的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40675645/

相关文章:

ios - 在 iPhone 设备上的 ionic 应用程序中播放视频时没有声音

ios - ASIHttpRequest 仅支持 IPv6 吗?

ios - 在 Swift 中覆盖 UI 元素 .enabled 属性

java - 在多个线程之间共享对象

Linux、Apache 和 IPC

c++ - 调用 xSemaphoreGive 后,xSemaphoreTake 不会恢复任务

android - iOS,以非故事模式启动邮件客户端。如何?

iPhone 网络应用程序自动刷新

ios - 如何更改按钮上的操作目标 - Swift

Swift 3 发送带有附件歧义表达式的电子邮件