用于读取或写入的并发或串行队列

时间:2012-08-29 10:40:22

标签: concurrency grand-central-dispatch serial-processing

我正在编写一个类似于NSObject的{​​{1}}子类,它可以在iOS设备上启用文件缓存到磁盘。

我正在为(i)阅读(ii)写入而编写队列,但我想确保我将创建的队列类型是正确的,因此不会导致文件成为问题将来腐败。

对于读取队列,我计划创建一个并发队列,因为可以同时读取多个文件而没有任何问题。

但是,对于写入队列,我计划创建一个串行队列,以防止同时写入多个文件。

你能告诉我这是否是正确的做法?

2 个答案:

答案 0 :(得分:1)

为了获得更好的性能,我建议一个并发队列,dispatch_sync用于读取,dispatch_barrier_async用于写入。正如Mike Ash puts it

  

因为它使用屏障功能,所以它确保在块运行时对缓存进行独占访问。它不仅会在运行时排除对缓存的所有其他写入,而且还会排除所有其他读取,从而使修改安全。

答案 1 :(得分:0)

根据您的跟随评论,我认为您正在寻找的模式/用途是一个串行队列(每个缓存对象/文件一个),其中dispatch_async()用于写入缓存条目的块和dispatch_sync()(注意阅读它们。写入在串行队列上可以是异步的,这仍然会使它们保持有序,并且执行同步读取将强制所有挂起的写入在尝试读取值之前完成。