2016-11-18 82 views
2

的关系,我很困惑与DispatchQueue和DispatchSemaphore.Like下面的例子:[游乐场] bettwen 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 

有谁知道原因吗?

感谢

回答

2

因为你是异步运行它,游乐场全部完成迭代40完成之前。将这2行添加到代码的开头或结尾处:

import PlaygroundSupport 
PlaygroundPage.current.needsIndefiniteExecution = true