我有一个应用程序,需要每X毫秒发送一次收集的数据(而不是更快!)。我的第一个想法是在NSMutableArray
上的array1
(thread1
)上堆叠数据。当thread2
等待它的时间为X毫秒时,它会将NSMutableArray替换为新的(array2
),然后处理其内容。但是,我不希望thread1
在array1
拥有thread2
时进一步修改thread2
。
这可能会有效,但是线程安全不是你想要“试试”的领域。这种方法有哪些缺陷,我应该做些什么呢?
(另外,如果{{1}}实际上是一个NSTimer实例,那么问题/答案是如何改变的?这一切都会发生在一个线程上[这对我来说没什么问题,因为处理只需要一小部分时间毫秒])。
答案 0 :(得分:1)
您应该使用NSOperationQueue或Grand Central Dispatch。基本上,您将创建一个接收数据的操作,并在X毫秒过去后上传它。每个操作都是独立的,您可以配置队列,以及您允许的并发操作数,操作优先级等。
关于并发性的Apple文档应该有所帮助:
答案 1 :(得分:0)
这种方法的缺陷与你“换出”NSArray
换新的方法有关。想象一下,thread1获取对数组的引用,同时thread2交换数组并完成处理。 Thread1现在写入一个死数组(一个不再被处理的数组),即使它只是几毫秒。防止这种情况的方法是在关键部分使用同步代码块(即,使代码“线程安全”),但是有点难以超越标记并同步太多的代码(牺牲表现)。
所以风险就是你:
这个想法是“远离线程”,这就是this link的意思。