Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在.NET中使用密钥的独占锁_C#_.net_Multithreading_Locking - Fatal编程技术网

C# 在.NET中使用密钥的独占锁

C# 在.NET中使用密钥的独占锁,c#,.net,multithreading,locking,C#,.net,Multithreading,Locking,我使用C#中的lock语句专门执行一段代码。是否有一种方法可以基于密钥执行相同的操作 例如: lock(object, key) { //code-here } 我有一个方法,它有一些代码不是线程安全的,但是只有在两个并行执行中的键(字符串)恰好相同的情况下。有没有办法在.NET中实现这一点 如果有一种方法,那么如果并行执行中使用的键不同,我们可以进行并行执行,并且可以提高性能。将锁对象放入按键索引的字典-字典并按键抓取对象以锁定 如果需要动态添加新的键/锁对象对,请确保围绕字典访问进行锁定,

我使用C#中的lock语句专门执行一段代码。是否有一种方法可以基于密钥执行相同的操作

例如:

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