gpt4 book ai didi

c# - C# 中锁的过度使用

转载 作者:行者123 更新时间:2023-12-02 18:00:34 25 4
gpt4 key购买 nike

我继承了一些需要进行微调的 C# 代码。由于字典(在下面的代码中)是在堆栈上创建的,这意味着每次调用都将使用单独的实例(由不同线程创建),并且在这种情况下不需要使用锁,这是正确的吗?在我看来,没有必要。

private object textLock = new object();
private Dictionary<string, string> GetMyTexts(Language language)
{
Dictionary<string, string> texts = new Dictionary<string, string>();
foreach (KeyValuePair<string, DisplayText> pair in Repository.DisplayTextCollection.Texts)
{
string value = pair.Value.Get(language);
//other code ....
lock(textLock)
{
texts.Add(pair.Key, value);
}
}
return texts;
}

最佳答案

为了澄清,字典是在堆上创建的 - 它只是对位于堆栈上的字典的引用。

由于在方法返回之前没有其他线程或上下文可以访问该引用,因此没有其他代码可以同时修改字典,因此当前所在的锁是无用的。

另一方面,如果锁位于 foreach 循环之外,则它可能用于确保在任何时候仅执行其中一个方法(例如,如果 Language存储库不是线程安全的)

关于c# - C# 中锁的过度使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58501277/

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