【发布时间】:2014-11-07 18:09:44
【问题描述】:
我有一个包装数据模型并由多个线程访问/修改的类。我需要确保对数据模型的修改是同步的。我正在使用 dispatch_queue_create(..., DISPATCH_QUEUE_SERIAL)。这非常适合我的需求。
我课堂上的大多数方法在内部调用“dispatch_async(queue, ^{...});”。有几个地方我需要返回快照结果。这是外观的简化示例:
- (NSArray*) getSomeData {
__block NSArray* result = nil;
dispatch_sync(queue, ^{
... Do Stuff ...
result = blah.blah;
}
return result;
}
现在,让我们假设有 5 个“异步任务”排队,其中一个正在执行。现在安排了“同步”任务。 “同步任务”什么时候执行?
我希望发生的是“同步任务”在任何挂起的“异步任务”之前执行。这是默认情况下发生的情况吗?如果没有,有没有办法将“同步任务”优先排队?
顺便说一句,
我知道我可以设置一个整体队列优先级,但这不是这个问题的目的。对我来说,队列优先级正常就可以了。我只希望我的同步任务在任何待处理的异步任务之前发生。
【问题讨论】:
标签: multithreading grand-central-dispatch