2016-11-18 6 views
2

bettwen関係:1 ... 40は、実際には、それだけで約25を印刷し[遊び場]私はDispatchQueueとDispatchSemaphore.Like次の例で混乱していますDispatchQueueとDispatchSemaphore

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

私はそれを印刷すべきだと思いますその結果は次のようになります。

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 
関連する問題