gpt4 book ai didi

c# - 如果我只是阅读字典,我应该锁定字典吗?

转载 作者:行者123 更新时间:2023-12-05 00:13:28 24 4
gpt4 key购买 nike

我有一个存储字典的类。一个线程可以在另一个函数中编辑这个字典。鉴于它正在写入这本字典,我确保它被锁在锁中。例如:

        public void SetModuleLogLevel(string module, LogLevel logLevel)
{
if (module == "Other" || !this._moduleToLogLevel.ContainsKey(module))
return;

lock (this._lock)
{
this._moduleToLogLevel[module] = logLevel;
}
}

我有另一个函数从这个字典返回值。例如,

        private bool IsUrgentToLog(string module, LogLevel logLevel)
{
if (!this._moduleToLogLevel.ContainsKey(module)) return false;

lock (this._lock)
{
if (this._moduleToLogLevel[module] < logLevel) return true;
}

return false;
}

鉴于我只是在这个函数中读取这本字典,它需要锁吗?

最佳答案

Dictionary<TKey, TValue>当任何线程对其进行变异时,不做任何保证,即您可以拥有“任意数量的读者”或“至多一个作者,零个读者”。所以:如果它可以发生突变:是的,你确实需要一个 lock阅读,以保护其他读者。

您可能会发现使用 ConcurrentDictionary<TKey, TValue> 更容易(任意数量的读者和/或作者),或者如果您不介意丢失泛型:Hashtable (最多一个写入器任意数量的读取器并发,即您只需要同步写入)。

关于c# - 如果我只是阅读字典,我应该锁定字典吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60479447/

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