gpt4 book ai didi

c# - 如何通过方法参数锁定?

转载 作者:可可西里 更新时间:2023-11-01 08:37:26 24 4
gpt4 key购买 nike

string Get(string key){
lock(_sync){
// DoSomething
}
}

如果 DoSomething 只依赖于键,我想要依赖于键的锁。我认为它可能是带有同步对象的字典。有没有完整的解决方案?

像真实的例子 What is the best way to lock cache in asp.net?

最佳答案

好吧,你可以创建一个 Dictionary<string, object>并懒惰地用要锁定的对象填充它。例如:

readonly Dictionary<string, object> dictionary = new Dictionary<string, object>();
readonly object dictionaryLock = new object();

string Get(string key) {
object bodyLock;
lock (dictionaryLock) {
if (!dictionary.TryGetValue(key, out bodyLock)) {
bodyLock = new object();
dictionary[key] = bodyLock;
}
}
lock (bodyLock) {
...
}
}

如果您需要在其他地方以相同的方式锁定,我会将“锁定查找”部分移至辅助方法。请注意,如果您使用的是 .NET 4,ConcurrentDictionary可以使这更容易,并且无需使用额外的锁。

请注意,在此设计中没有任何东西可以清除字典...您是否有一组固定的键(在这种情况下没关系)或者它可以永远增长吗?

有一件事您似乎已经意识到:锁定 key 本身将是一个非常糟糕的主意。相同的键可以是不同的对象,如果有任何 其他 代码也锁定字符串,它可能会干扰此代码。锁定字符串几乎总是错误的:)

关于c# - 如何通过方法参数锁定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4954626/

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