【发布时间】:2013-09-04 10:24:37
【问题描述】:
在 Objective-c 中,(至少)有两种方法可以同步对共享资源的并发访问。旧的基于锁的方法和新的 Grand Central Dispatch (GCD) 方法,后者使用 dispatch_sync 将所有访问分派到共享队列。
在Concurrency Programming Guide, section Eliminating Lock-Based Code 中,声明“使用锁是有代价的。即使在无争议的情况下,使用锁总是会带来性能损失。”
这是 GCD 方法的有效论据吗?
我认为不是以下原因:
队列必须有一个队列任务列表。一个或多个线程可以通过 dispatch_sync 将任务添加到此列表中,并且一个或多个工作线程需要从该列表中删除元素才能执行任务。这必须由锁保护。所以那里也需要锁。
请告诉我是否有任何其他方法可以在没有我不知道的锁定的情况下执行此操作。
更新:在指南的后面,暗示有一些我不知道的事情:“排队任务不需要陷入内核来获取互斥锁。”
它是如何工作的?
【问题讨论】:
标签: objective-c concurrency locking grand-central-dispatch