线程安全nsdictionary

时间:2011-01-13 02:38:44

标签: cocoa nsdictionary

我有一个nsdictionary从A LOT读取,并且在某些时候同时写入A LOT。

为了帮助它在迭代时保证线程安全,我复制它,迭代副本,然后添加到原始文件中。

有时,另一个线程在添加时会复制它。有没有更好的方法使其线程安全?

2 个答案:

答案 0 :(得分:1)

如果您要对NSMutableDictionary进行更改并且需要以线程安全的方式完成操作,最简单的方法是使用@synchronized包装该对象的所有访问权限语句,它告诉编译器以线程安全,异常安全的方式锁定对象的访问:

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

@synchronized有更高性能的替代方案,但如果您已经分析了代码并且看到同步是一个问题,那么这应该只是一个问题。

答案 1 :(得分:0)

许多方法之一:

创建一个包含适当的锁和字典的类(具体来说,我使用c ++模板作为容器)。然后根据需要包装界面。我已经为许多CF / NS类型做了这个。它的速度和合理的一样快。既然你正在处理集合,你有几个注意事项(例如,当内容变异时是否保持锁定?)