And*_*ock 2 c# asp.net multithreading
我的C#ASP.NET项目中有一个静态变量(抽象数据类型,而不是原始数据).
它将由许多线程同时和频繁地读取.
我需要很少写入(与读取次数相比).
什么是确保线程的最佳方法,以便在写入时,其他线程不读取部分写入的数据?
我只使用过lock,但我明白这会阻止并发读取:(
谢谢
我开始吧lock.无可争议的锁非常便宜.您可以使用ReaderWriterLockSlim(假设您使用的是.NET 3.5),但锁定更容易.如果/当它成为问题时优化它.
直线ReaderWriterLock可能比简单的锁慢 - 它没有它可能的那么快,因此超薄版:)
您经常"频繁"的频率是多少?您期望多少争用?您可能希望对其进行建模(例如,模拟合理数量的请求)并对基准锁定与简单锁定进行比较,只是为了查看开销是多少.
你可能可以使用无锁的选项volatile- 但坦率地说,我最近已经放弃了,因为对于理智的人来说太难以理解.(这并不意味着我的意思.)
你实际上在做什么数据?类型是不可变类型,所以一旦你有了正确的引用,你就可以在没有任何锁定的情况下以线程安全的方式阅读?