c# - 与缓存交互时的线程安全

标签 c# .net multithreading concurrency thread-safety

我有一个问题可以帮助我理解我的 .net C# 应用程序中的线程安全和并发性。

以从asp.net缓存读写为例。

我正在开发一个与缓存交互的大规模 .net 应用程序。

我知道并发的不同级别,乐观的和悲观的。但是我有点困惑这和线程安全之间的区别。

与缓存交互时,我是否应该使用锁来确保缓存在读取和写入时不会被多个线程操纵。那么我应该使用锁吗?这如何适应并发性?

最佳答案

乐观和悲观并发是用于处理多个用户的更新并防止用户覆盖彼此更改的概念。它们用于线程安全之外的另一个级别。线程安全锁定与悲观并发最相似。

ASP.NET 缓存对象本身是线程安全的。您可以从多个线程访问它,而不会损坏集合本身。但是,您有责任确保放入缓存中的对象的线程安全。

最简单的方法可能是使所有要放入缓存的对象不可变(例如.NET 的 string 类)。一旦创建,对象将永远不会更新,只能读取。只读操作始终是线程安全的。如果您需要更新数据,您可以根据旧对象创建一个新对象并替换缓存中的对象。这样您就不必自己处理线程安全,因为您可以依赖缓存对象。

如果必须更新缓存中的对象,则必须确保这些对象的所有更新操作都是线程安全的。

关于c# - 与缓存交互时的线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9352560/

相关文章:

c# - XML 序列化数据返回的最佳数据类型

c# - 如何在运行时创建的控件上添加事件

.net - 编码和解码内容类型 'application/soap+msbin1',以便与 C#.NET 中的 HttpWebRequest/HttpWebResponse 一起使用

python - PyQt 简单 HTTP 服务器 : GUI freezes on starting server

c# - 在程序集中查找嵌入的资源名称?

c# - 当 TextBox 子项失去焦点时,ScrollViewer 跳到顶部

c# - 是否可以在 Moq 返回的对象上设置属性?

c# - 如何设置 DateTime 值的时区(或种类)?

c++ - 跨进程的 POSIX 共享内存同步 C++/C++11

Java:线程间共享和调用变量