2011-04-12 24 views
1

我有一个应用程序需要每X毫秒发送一次收集的数据(而不是更早!)。我的第一个想法是将数据叠加在NSMutableArrayarray1thread1上。当thread2完成等待X毫秒时,它将换出新的NSMutableArray(array2),然后处理其内容。不过,我不想让thread1进一步修改array1,一旦thread2有了它。NSThread捡起队列和进程它

这可能会起作用,但线程安全并不是您想要“试用它”的领域。这种方法有什么缺陷,我该怎么做? (另外,如果thread2实际上是一个NSTimer实例,问题/答案是如何改变的?它是否会发生在一个线程上(这对我来说很好,因为处理只需要几分之一毫秒)? )。

回答

0

这种方法的缺陷与“换出”NSArray时有关。想象一下,thread1获得对该数组的引用,并且同时thread2交换数组,并且完成处理。现在Thread1正在写入一个死数组(即不再被处理的数组),即使它只是几毫秒。防止这种情况的方法是通过在关键部分使用同步代码块(即使代码“线程安全”),但是不要过度标记并同步太多代码(牺牲性能)。

所以,风险是你会:

    不是线程安全的 是过度使用同步和慢(和线程已经有一个性能开销)
  • 使代码
  • 制作
  • 使代码这两个组合:缓慢,不安全的代码。

这个想法是“从线程迁移”,这是什么this link是关于。