2011-01-13 16 views
0

我有一個nsdictionary從一個LOT讀取並在一些點同時寫入一個LOT。線程安全nsdictionary

爲了使其在迭代時更安全,我將其複製,迭代並添加到原始文件中。

有時,另一個線程正在複製它,而它被添加到。有沒有更好的方法使其線程安全?

回答

1

如果您想要對NSMutableDictionary進行更改並且需要以線程安全的方式完成操作,最簡單的方法是使用@synchronized語句將該對象上的所有訪問封裝起來,該語句告訴編譯器鎖訪問對象的線程安全的,異常安全的方式:

@synchronized (myDictionary) { 
    [myDictionary setObject: ... forKey: ...]; 
    [myDictionary removeObjectForKey: ...]; 
} 

有性能更高的替代品@synchronized,但是這應該只是一個問題,如果你已經異形你的代碼,看到同步一個問題。

+0

關於NSMutableDictionary,除了讀僅僅是線程安全的(即將它看作與不可變的NSDictionary完全相同並且只在初始化時寫入)。 – 2011-01-13 03:15:39

0

的許多方法中的一種:

創建一個包含適當的鎖和詞典(具體而言,我使用C++模板,其作爲容器)的類。然後根據需要包裝界面。我爲許多CF/NS類型做過這個。它的速度是合理的。因爲你在處理集合,所以你有幾個注意事項(例如,當內容發生變化時鎖是否被鎖定?)