我创建了一个串行调度队列:
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 文档支持。