我有一个nsdictionary从A LOT读取,并且在某些时候同时写入A LOT。
为了帮助它在迭代时保证线程安全,我复制它,迭代副本,然后添加到原始文件中。
有时,另一个线程在添加时会复制它。有没有更好的方法使其线程安全?
答案 0 :(得分:1)
如果您要对NSMutableDictionary
进行更改并且需要以线程安全的方式完成操作,最简单的方法是使用@synchronized
包装该对象的所有访问权限语句,它告诉编译器以线程安全,异常安全的方式锁定对象的访问:
@synchronized (myDictionary) {
[myDictionary setObject: ... forKey: ...];
[myDictionary removeObjectForKey: ...];
}
@synchronized
有更高性能的替代方案,但如果您已经分析了代码并且看到同步是一个问题,那么这应该只是一个问题。
答案 1 :(得分:0)
许多方法之一:
创建一个包含适当的锁和字典的类(具体来说,我使用c ++模板作为容器)。然后根据需要包装界面。我已经为许多CF / NS类型做了这个。它的速度和合理的一样快。既然你正在处理集合,你有几个注意事项(例如,当内容变异时是否保持锁定?)