【发布时间】:2018-09-15 02:31:35
【问题描述】:
多个线程从Lookup<TKey, TElement> 中读取是否安全?
Lookup<TKey, TElement> 是不可变的,但是 MSDN 声明:
此类型的任何公共静态(在 Visual Basic 中为共享)成员都是 线程安全。不保证任何实例成员都是线程 安全。
虽然我不敢想象,但我想知道抽出 MSDN 文档的机器是否 可能不正确。
【问题讨论】:
-
对不起,我忘了这里不允许玩。
-
你能想象一个多线程可能在读取不可变数据结构时出现问题的情况吗?
-
@ChaosPandion:当然。某些东西可能在外部是不可变的,但在内部会改变状态(例如,用于缓存) - 在这种情况下,通过公共 API 读取的两个线程可能可能会破坏内部状态。
-
@RonnieOverby:我不知道,不。我强烈怀疑它是线程安全的,但我不想保证。还有其他原因导致读取可能不是线程安全的 - 例如内存模型会从某些线程中提供“陈旧”读取。
-
@Jon Skeet - 如果你问我,这听起来像是一段伪劣的代码。 :)
标签: c# .net multithreading data-structures lookup