使用GCD进行读写锁定

Eri*_*k S 10 iphone multithreading locking objective-c grand-central-dispatch

我的应用程序大量使用GCD,几乎所有内容都分散在由调度处理的小任务中.但是,基础数据模型主要是读取的,只是偶尔写入.

我目前使用锁来防止在阅读时更改关键数据结构.但是在今天看了一些锁之后,我发现了NSConditionLock和一些关于读写锁的页面.后者正是我所需要的.

我找到了这个实现:http://cocoaheads.byu.edu/wiki/locks.我的问题是,这个实现是否适用于GCD,看到它使用PThreads?

Ken*_*ses 24

它仍然有效.pthreads是线程API,是Mac OS X上所有其他使用线程的API的基础.(在那里有Mach线程激活,但那是SPI,而不是API.)无论如何,pthreads锁并不需要你使用pthreads线程.

但是,从iOS 5开始,GCD提供了更好的选择:dispatch_barrier_async().基本上,您有一个私有并发队列.您以正常方式向其提交所有读取操作.您可以使用barrier例程向其提交写入操作.当当!读写锁定.

如果您有权访问Session 210 - Mastering Grand Central DispatchWWDC 2011会话视频,您可以了解更多相关信息.

  • Mike Ash还提供了一个很好的例子,说明如何使用GCD完成读写器同步.http://www.mikeash.com/pyblog/friday-qa-2011-10-14-whats-new-in-gcd.html (4认同)