我得到這個代碼的行爲有些疑惑:dispatch_sync叫成dispatch_async呼叫
dispatch_async(queue, ^{
sleep(2);
NSLog(@"step1");
dispatch_sync(queue, ^{
sleep(3);
NSLog(@"step 2");
});
NSLog(@"step 3");
});
從這些行我希望獲得儘可能輸出step1 -> step3 -> step2
但我只獲得step1
。
如果我使用dispatch_async更改dispatch_sync,它的工作方式與預期的一樣,dispatch_sync調用dispatch_async調用會產生這種問題嗎?
編輯答案後----------------
此情況下創建一個僵局:
您可以檢查接受的答案有這種情況的解釋並檢查此鏈接的文檔http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man3/dispatch_async.3.html