关于锁策略的问题(c# / . net 3.5 SP1)

本文关键字:net SP1 策略 于锁 问题 | 更新日期: 2023-09-27 18:03:38

我需要写一个类,持有作为字典。字典将被多个线程访问。每次访问将非常短。

我希望:

  • 每分钟一次添加或删除条目的访问
  • 每2秒,我需要创建一个字典的副本。对它进行检查(然后调用DB)
  • 每秒多次,我将值的字段更新为其中一个键。

你会选择哪种锁策略,为什么?我的第一个尝试是使用ReaderWriterLockSlim。但是在我读到它至少比Monitor慢两倍之后,我就不那么确定了,因为每次我访问字典时,我都会锁定很短的时间。

tia马丁

关于锁策略的问题(c# / . net 3.5 SP1)

考虑到最频繁的操作是写入,并且就我所见,您永远不需要多个并发的读取器,我将只使用普通锁。我看不出ReaderWriterLockSlim对你有什么帮助,而且它肯定会给你更复杂的代码。

编辑:一个可能的优化是只访问写线程的更改列表。然后,在处理列表之前更新底层字典时,读取线程需要锁定列表。假设字典非常大,但更改列表相对较小,这意味着写入线程将阻塞更短的时间。

实际上,您可以使用Queue之类的东西来代替列表,并可能使读线程对小批量的队列进行解列并yield,从而进一步减少写线程的延迟——因此,如果有100个更改要处理,读线程可能会读取其中的10个,yield,以便任何阻塞等待添加到队列的写线程可以得到它们的轮到。

有更复杂的解决方案,这取决于性能的关键程度,特别是在延迟方面-但我将从字典的锁开始。