读/写锁定asp.net中的静态var

And*_*ock 2 c# asp.net multithreading

我的C#ASP.NET项目中有一个静态变量(抽象数据类型,而不是原始数据).

它将由许多线程同时和频繁地读取.

我需要很少写入(与读取次数相比).

什么是确保线程的最佳方法,以便在写入时,其他线程不读取部分写入的数据?

我只使用过lock,但我明白这会阻止并发读取:(

谢谢

Jon*_*eet 6

我开始吧lock.无可争议的锁非常便宜.您可以使用ReaderWriterLockSlim(假设您使用的是.NET 3.5),但锁定更容易.如果/当它成为问题时优化它.

直线ReaderWriterLock可能比简单的锁 - 它没有它可能的那么快,因此超薄版:)

您经常"频繁"的频率是多少?您期望多少争用?您可能希望对其进行建模(例如,模拟合理数量的请求)并对基准锁定与简单锁定进行比较,只是为了查看开销是多少.

可能可以使用无锁的选项volatile- 但坦率地说,我最近已经放弃了,因为对于理智的人来说太难以理解.(这并不意味着我的意思.)

你实际上在做什么数据?类型是不可变类型,所以一旦你有了正确的引用,你就可以在没有任何锁定的情况下以线程安全的方式阅读?