@synchronized或串行调度队列

时间:2013-09-03 16:59:51

标签: objective-c grand-central-dispatch foundation

@synchronized块上使用串行调度队列(假设默认优先级)来序列化对资源的访问时,是否会获得性能提升。通过增益,我的意思是由于同步机制本身导致的开销的任何差异。

1 个答案:

答案 0 :(得分:2)

当然可以。然而,语义也存在差异。 @synchronized块在边表中使用递归的,异常安全的互斥锁。所有这些属性都会带来一些额外的开销。 dispatch_queue_t的权重非常轻(特别是当使用dispatch _ * _ f来避免Block_copy())时,它是非递归的,不处理异常,并且不保证特定的线程。

就个人而言,我认为递归锁是一个坏主意,并且实际上不应该在Cocoa应用程序中捕获异常,因此@synchronized几乎没有吸引力。