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

时间:2017-09-14 14:51:58

标签: objective-c multithreading thread-safety nsmutabledictionary

我有两个线程:线程1在NSMutableDictionary中设置键值对,稍后读取该值,线程2与另一个键值对做同样的事情。 键是不同的,每个线程只读取它设置的键值对。但是,任何一个线程都可以在另一个线程写入时读取。

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

1 个答案:

答案 0 :(得分:0)

你不能改变/改变像字典这样的容器对象,同时也可以从另一个线程读取或写入容器对象。

在字典上设置键/值对正在改变字典。每个键/值对都不是一个独立的实体。

您必须保护字典,否则可能会崩溃或出现其他不良行为。从Objective-C执行此操作的一种简单方法是使用label.translatesAutoresizingMaskIntoConstraints = false label.leftAnchor.constraint(equalTo: contentView.leftAnchor).isActive = true label.rightAnchor.constraint(equalTo: contentView.rightAnchor).isActive = true label.topAnchor.constraint(equalTo: contentView.topAnchor).isActive = true label.bottomAnchor.constraint(equalTo: contentView.bottomAnchor).isActive = true 指令,并将字典本身用作传递给指令的对象:

@synchronized

从另一个主题:

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