C# 在.NET中使用密钥的独占锁
我使用C#中的lock语句专门执行一段代码。是否有一种方法可以基于密钥执行相同的操作 例如:C# 在.NET中使用密钥的独占锁,c#,.net,multithreading,locking,C#,.net,Multithreading,Locking,我使用C#中的lock语句专门执行一段代码。是否有一种方法可以基于密钥执行相同的操作 例如: lock(object, key) { //code-here } 我有一个方法,它有一些代码不是线程安全的,但是只有在两个并行执行中的键(字符串)恰好相同的情况下。有没有办法在.NET中实现这一点 如果有一种方法,那么如果并行执行中使用的键不同,我们可以进行并行执行,并且可以提高性能。将锁对象放入按键索引的字典-字典并按键抓取对象以锁定 如果需要动态添加新的键/锁对象对,请确保围绕字典访问进行锁定,
lock(object, key)
{
//code-here
}
我有一个方法,它有一些代码不是线程安全的,但是只有在两个并行执行中的键(字符串)恰好相同的情况下。有没有办法在.NET中实现这一点
如果有一种方法,那么如果并行执行中使用的键不同,我们可以进行并行执行,并且可以提高性能。将锁对象放入按键索引的字典-
字典
并按键抓取对象以锁定
如果需要动态添加新的键/锁对象对,请确保围绕字典访问进行锁定,否则,如果构建后仅从字典中读取值,则无需额外锁定。将锁对象放入按键索引的字典-
字典
并按键抓取对象以锁定
如果需要动态添加新的键/锁对象对,请确保围绕字典访问进行锁定,否则,如果在构造之后只从字典中读取值,则不需要额外的锁定。如何
If(key){lock(object){…}else{…}
?@HariPrasad,键是动态形成的。会有很多。另外,使用您的代码片段,我如何知道线程之间是否使用了相同的密钥?您不能锁定密钥本身吗?i、 e.lock(key)
@BradleySmith-不能保证键(string
)会是相同的引用,即使它们具有相同的值。如果(key){lock(object){…}else{…},则如何?@HariPrasad,key是动态形成的。会有很多。另外,使用您的代码片段,我如何知道线程之间是否使用了相同的密钥?您不能锁定密钥本身吗?i、 e.lock(key)
@BradleySmith-不能保证密钥(string
)会是相同的引用,即使它们具有相同的值。对于第二段,如果有必要,您可以使用ConcurrentDictionary
。对于第二段,如果需要,您可以使用ConcurrentDictionary
。