使用线程/块安全集合来协调多个异步操作? (NSMutableArray或NSMutableSet)

时间:2012-03-23 17:37:05

标签: ios cocoa-touch thread-safety objective-c-blocks

我正在编写一些代码来同步客户端和服务器之间的对象。它涉及一堆HTTP调用(我不是自己而是使用Parse库)和回调块。我想等到一组这些调用完成后再采取进一步行动。在此过程中,我需要将每个调用的结果存储在某个地方。

我能想到的最简单的方法是保留一个计数器和一个集合 - 类似于NSMutableArray或NSMutableSet。每次HTTP操作完成时,我将其结果存储在集合中并递增计数器。然后我检查计数器,如果它等于操作总数,我继续下一步。 (我提出了一个计数器而不是集合的大小,因为我可能不需要为每个HTTP调用存储一个对象。)

但是我猜测我遇到了线程安全问题:当两个调用同时返回并且尝试添加到集合和/或递增计数器时会发生什么?

这里的解决方案是什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

这就是GCD旨在处理的问题。您想要的是调度组。请参阅GCD Reference并查看“使用调度组”部分。使用调度组,您可以将各个块作为组的一部分提交,并在组完成时调用“通知”块,无论它们如何安排。