我有一个问题可以帮助我理解我的 .net C# 应用程序中的线程安全和并发性。
以从asp.net缓存读写为例。
我正在开发一个与缓存交互的大规模 .net 应用程序。
我知道并发的不同级别,乐观的和悲观的。但是我有点困惑这和线程安全之间的区别。
与缓存交互时,我是否应该使用锁来确保缓存在读取和写入时不会被多个线程操纵。那么我应该使用锁吗?这如何适应并发性?
最佳答案
乐观和悲观并发是用于处理多个用户的更新并防止用户覆盖彼此更改的概念。它们用于线程安全之外的另一个级别。线程安全锁定与悲观并发最相似。
ASP.NET 缓存对象本身是线程安全的。您可以从多个线程访问它,而不会损坏集合本身。但是,您有责任确保放入缓存中的对象的线程安全。
最简单的方法可能是使所有要放入缓存的对象不可变(例如.NET 的 string
类)。一旦创建,对象将永远不会更新,只能读取。只读操作始终是线程安全的。如果您需要更新数据,您可以根据旧对象创建一个新对象并替换缓存中的对象。这样您就不必自己处理线程安全,因为您可以依赖缓存对象。
如果必须更新缓存中的对象,则必须确保这些对象的所有更新操作都是线程安全的。
关于c# - 与缓存交互时的线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9352560/