【问题标题】:using thread/block-safe collection to coordinate multiple asynchronous operations? (NSMutableArray or NSMutableSet)使用线程/块安全集合来协调多个异步操作? (NSMutableArray 或 NSMutableSet)
【发布时间】:2012-03-23 17:37:04
【问题描述】:

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

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

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

这里有什么解决办法?

谢谢!

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2016-06-08
      • 2011-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多