我有一个在静态构造函数中填充一次的字典,从那时起就保持不变。我希望多个线程能够从此集合中读取值。我需要锁定吗?
答案 0 :(得分:14)
According to Microsoft's documentation,只要不修改集合,Dictionary类就可以同时支持多个读者。因此,不需要锁定。
答案 1 :(得分:2)
没有。只有在您可以使用读取交错多次写入或写入时,才需要锁定。只读,没有任何更改,不会引入一个线程正在做什么影响另一个线程正在做什么的可能性。
请注意,这根本不需要写入。例如,如果你正在使用一个对象并以某种方式读取它来修改对象的内部状态作为副作用,那么你需要保持锁定。
答案 2 :(得分:1)
编辑:似乎文档说这个类对于阅读来说是线程安全的。但如果没有下面的答案仍然适用,因为你不能认为你的只读是只为该课程阅读。
简短的回答是肯定的。除非班级说它是线程安全的。它可以做很多事情,而不是线程安全的。
它可能不会导致问题,但是类可能会以可能导致竞争条件的方式使用内部变量。它也可以调用非线程安全的其他类。除非你检查文档的代码说它没关系,否则假设是不安全的。
例如,您可能认为它是只读的,但尝试加快速度的类可能会缓存最后访问的涉及写入数据的项目。这可能会导致您检索到与预期不同的项目。
我再也不认为这可能在这里,但除非班级认为它是线程安全的,否则假设它是危险的。