MemoryCache.Set() 是线程安全的吗?

发布于 2024-11-25 07:24:16 字数 198 浏览 0 评论 0原文

不幸的是,MemoryCache.Set 的 MSDN 文档没有明确说明它是线程安全的还是不是。

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

The MSDN documentation for MemoryCache.Set unfortunately doesn’t state explicitly whether it is thread-safe or not.

Is it safe to use .Get() and .Set() from several threads without an explicit lock?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

萧瑟寒风 2024-12-02 07:24:16

是的,MemoryCache 类 线程安全

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

这可能指的是存储在缓存中的数据
本身可能不是线程安全的。例如,如果一个列表被放置在
缓存,并且两个单独的线程都获取对缓存的引用
列表,如果两个线程最终会互相踩踏
两者都尝试同时更新列表。

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

Yes, the MemoryCache class is thread safe:

System.Runtime.Caching.MemoryCache is threadsafe. Multiple concurrent
threads can read and write a MemoryCache instance. Internally
thread-safety is automatically handled to ensure the cache is updated
in a consistent manner.

What this might be referring to is that data stored within the cache
may itself not be threadsafe. For example if a List is placed in
the cache, and two separate threads both get a reference to the cached
List, the two threads will end up stepping on each other if they
both attempt to update the list simultaneously.

This being said the Get and Set methods are thread safe but if the data structure you might be storing into this cache is not thread safe you might get into trouble. Imagine for example that you stored a dictionary inside this cache. Then while thread1 uses Get to fetch the dictionary and starts reading from it, thread2 uses Get to fetch this same dictionary and tries to write to it. While the Get operation will be thread safe what will happen next could be pretty nasty.

咆哮 2024-12-02 07:24:16

MemoryCache 指出:

此类型是线程安全的。

The documentation for MemoryCache states:

This type is thread safe.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文