线程安全:两个线程访问不同的 NSMutableDictionary 条目

Thread Safety: Two threads accessing distinct NSMutableDictionary entries

我有两个线程:线程 1 在 NSMutableDictionary 中设置一个键值对,稍后读取该值,线程 2 对另一个键值对执行相同的操作。 键是不同的,每个线程只读取它设置的键值对。但是,任何一个线程都可以在另一个线程写入的同时进行读取。

所以我的问题是,如果两个线程同时访问同一个 NSMutableDictionary 的不同条目,我是否需要保护 NSMutableDictionary? (整个 NSMutableDictionary "claimed" 是一个线程还是对各个条目的操作是独立的?)

您不能 change/mutate 像字典这样的容器对象同时从另一个线程读取或写入它。

在字典上设置 key/value 对会改变字典。每 key/value 对不是一个独立的实体。

您必须保护字典,否则您可能会崩溃或出现其他不良行为。从 Objective-C 做到这一点的一种简单方法是使用 @synchronized 指令,并使用字典本身作为传递给指令的对象:

@synchronized(myDict) {
   valueFromDict = myDict[@"someKey"];
}

来自另一个线程:

@synchronized(myDict) {
   myDict[@"someOtherKey"] = someValue;
}