【发布时间】:2011-10-07 23:09:38
【问题描述】:
不幸的是,MSDN documentation for MemoryCache.Set 没有明确说明它是否是线程安全的。
在没有显式锁定的情况下从多个线程使用.Get() 和.Set() 是否安全?
【问题讨论】:
标签: c# thread-safety memorycache
不幸的是,MSDN documentation for MemoryCache.Set 没有明确说明它是否是线程安全的。
在没有显式锁定的情况下从多个线程使用.Get() 和.Set() 是否安全?
【问题讨论】:
标签: c# thread-safety memorycache
是的,MemoryCache 类is thread safe:
System.Runtime.Caching.MemoryCache 是线程安全的。多个并发 线程可以读取和写入 MemoryCache 实例。内部 自动处理线程安全以确保更新缓存 以一致的方式。
这可能指的是存储在缓存中的数据 本身可能不是线程安全的。例如,如果一个列表被放置在 缓存,两个单独的线程都获得对缓存的引用 清单,如果两个线程最终会互相踩踏 两者都尝试同时更新列表。
这就是说 Get 和 Set 方法是线程安全的,但是如果您可能存储到此缓存中的数据结构不是线程安全的,您可能会遇到麻烦。例如,假设您在此缓存中存储了一个字典。然后当 thread1 使用 Get 获取字典并开始从中读取时,thread2 使用 Get 获取相同的字典并尝试写入它。虽然 Get 操作将是线程安全的,但接下来发生的事情可能非常糟糕。
【讨论】:
MemoryCache 的文档指出:
这种类型是线程安全的。
【讨论】:
MemoryCache) 反而会为您提供您正在寻找的快乐结果。