MemoryCache.Set()线程安全吗?

时间:2011-07-18 19:19:08

标签: c# thread-safety memorycache

遗憾的是,MSDN documentation for MemoryCache.Set没有明确说明它是否是线程安全的。

在没有明确锁定的情况下从多个线程使用.Get().Set()是否安全?

2 个答案:

答案 0 :(得分:70)

是的,MemoryCache类is thread safe

  

System.Runtime.Caching.MemoryCache是​​线程安全的。多个并发   线程可以读写MemoryCache实例。内部   自动处理线程安全以确保更新缓存   以一致的方式。

     

这可能指的是存储在缓存中的数据   本身可能不是线程安全的。例如,如果放入了List   缓存和两个单独的线程都获得对缓存的引用   列表,这两个线程最终会相互踩到它们   两者都试图同时更新列表。

这就是说Get和Set方法是线程安全的,但是如果你可能存储到这个缓存中的数据结构不是线程安全的,那么你可能会遇到麻烦。想象一下,例如,您在此缓存中存储了一个字典。然后当thread1使用Get来获取字典并开始从中读取时,thread2使用Get来获取同一个字典并尝试写入它。虽然Get操作将是线程安全的,但接下来发生的事情可能会非常糟糕。

答案 1 :(得分:10)

MemoryCache州的文档:

  

此类型是线程安全的。