2011-04-12 52 views
1

我有一個應用程序需要每X毫秒發送一次收集的數據(而不是更早!)。我的第一個想法是將數據疊加在NSMutableArrayarray1thread1上。當thread2完成等待X毫秒時,它將換出新的NSMutableArray(array2),然後處理其內容。不過,我不想讓thread1進一步修改array1,一旦thread2有了它。NSThread撿起隊列和進程它

這可能會起作用,但線程安全並不是您想要「試用它」的領域。這種方法有什麼缺陷,我該怎麼做? (另外,如果thread2實際上是一個NSTimer實例,問題/答案是如何改變的?它是否會發生在一個線程上(這對我來說很好,因爲處理只需要幾分之一毫秒)? )。

回答

0

這種方法的缺陷與「換出」NSArray時有關。想象一下,thread1獲得對該數組的引用,並且同時thread2交換數組,並且完成處理。現在Thread1正在寫入一個死數組(即不再被處理的數組),即使它只是幾毫秒。防止這種情況的方法是通過在關鍵部分使用同步代碼塊(即使代碼「線程安全」),但是不要過度標記並同步太多代碼(犧牲性能)。

所以,風險是你會:

    不是線程安全的 是過度使用同步和慢(和線程已經有一個性能開銷)
  • 使代碼
  • 製作
  • 使代碼這兩個組合:緩慢,不安全的代碼。

這個想法是「從線程遷移」,這是什麼this link是關於。