objective-c – 用NSOperationQueue解决读写器问题?
我知道有可能使用障碍解决GCD中的读者作家问题.由于我(通常)尝试在性能不是关键问题时使用NSOperationQueue而不是GCD,所以我想要一个NSOperation兼容的解决方案来解决这个问题.
我试图写我自己的,但是我的解决方案变得笨拙…肯定有人已经解决了这个问题? 有没有人知道与读写器问题的NSOperation兼容的解决方案? 解决方法
与大多数NSOperationQueue Hackery一样,您可以利用其对操作之间的依赖关系的支持:
>创建NSBlockOperation子类ReaderWriterBlockOperation.添加到它的属性BOOL作家. > -readWithBlock:在@synchronized(self)块中,执行从最后到第一个操作的扫描查找写入程序块.如果没有找到,它会添加操作并返回.如果找到它,则使新的读取器块依赖于作者,排列它并返回. 这应该是阻止所有读者的结果,直到作者完成之前,阻止所有作家,直到读者完成之前. 一个可能的问题:我不清楚(因为文档不清楚,我还没有实现这一点)如果NSBlockOperation实际上等待其块完成运行,然后声明自己完成.如果没有,您需要在您的操作子类中管理自己. 所有这一切,如果系统提供了一个工作的解决方案,如障碍块,你应该使用它.这个整个系统是一个操作队列来执行调度队列已经被调整得很好的事情.如果性能实际上不是一个问题,那么为什么不使用串行队列(NSOperationQueue,最大并发操作数为== 1)? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |