gpt4 book ai didi

c# - 关于锁定策略的问题(C#/.NET 3.5 SP1)

转载 作者:行者123 更新时间:2023-11-30 22:36:48 27 4
gpt4 key购买 nike

我需要编写一个类作为字典。字典将被多个线程访问。每次访问都会很短。

我希望:

  • 每分钟一次访问,添加或删除条目
  • 每 2 秒。我需要创建该字典的副本。对其进行检查(然后例如调用数据库)
  • 我每秒多次将值的字段更新为其中一个键。 (value是一个struct)同一个key不会被并发访问。

您会选择哪种锁定策略,为什么?我的第一个镜头是使用 ReaderWriterLockSlim。但是在我阅读它比 Monitor 至少慢两倍之后,我不再那么确定了,因为每次我访问 dict 时,我都会锁定很短。

蒂亚马丁

最佳答案

鉴于最频繁的操作是写入,而且据我所知,您永远不需要多个并发的读取器,我只会使用普通锁。我看不出 ReaderWriterLockSlim 对您有帮助,它肯定会给您更复杂的代码。

编辑:一种可能的优化是仅从写入线程访问更改列表。然后读取线程需要锁定该列表只是,同时在处理它之前更新基础字典。假设字典很大但更改列表相对较小,这意味着写入线程将被阻塞的时间要少得多。

事实上,您可以使用 Queue 之类的东西代替列表,并有可能使读取线程出列小批量并产生 yield ,从而进一步减少写入线程的延迟 - 所以如果有处理 100 个更改,读取线程可能会读取其中的 10 个,让出任何被阻塞等待添加到队列的写入线程都可以轮到它们。

对此有越来越复杂的解决方案,具体取决于性能的重要性,尤其是在延迟方面 - 但我会先从字典锁定开始。

关于c# - 关于锁定策略的问题(C#/.NET 3.5 SP1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6812479/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com