我有一個創建一個串行調度隊列:dispatch_async VS dispatch_sync執行順序
dispatch_queue_t serialQueue = dispatch_queue_create("com.unique.name.queue", DISPATCH_QUEUE_SERIAL);
我想用這個序列排隊,以確保訪問類線程安全的,同時自動做異步工作並不需要返回到調用線程。
- (void)addObjectToQueue:(id)object
{
dispatch_async(serialQueue, ^{
// process object and add to queue
});
}
- (BOOL)isObjectInQueue:(id)object
{
__block BOOL returnValue = NO;
dispatch_sync(serialQueue, ^{
// work out return value
});
return returnValue;
}
如果我稱之爲addObjectToQueue:方法,然後立即撥打isObjectInQueue:方法,是他們保證以相同的順序執行,否則會/可以在isObjectInQueue執行第一?
換句話說,dispatch_async與dispatch_sync(立即調度塊)的執行方式是否完全相同,只是它不會阻塞調用線程?
我已經看到類似的問題,兩種方式的答案,所以我正在尋找一個明確的答案,最好支持Apple文檔。
「如果我調用addObjectToQueue:方法,那麼立即調用isObjectInQueue:方法,它們是否保證按照相同的順序執行,或者/是否可以首先執行isObjectInQueue?通過問這個問題你可能的意思是「我們可以在它被添加到隊列之前詢問對象嗎?」。因爲,顯然,如果在同一個線程上調用這兩個方法,它們將被調用。 – krafter