次のコマンドでシリアル ディスパッチ キューを作成しました。
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のドキュメントに裏付けられた決定的な回答を探しています。