【发布时间】:2008-10-01 13:12:16
【问题描述】:
我有一个Dictionary<string, someobject>。
编辑:有人向我指出,我的例子很糟糕。我的整个意图不是更新循环中的引用,而是根据不同的线程更新不同的值需要更新/获取数据。我将循环更改为方法。
我需要更新字典中的项目 - 一次一个键,我想知道在我的 Dictionary 对象的 .key 值上使用锁定是否有任何问题?
private static Dictionary<string, MatrixElement> matrixElements = new Dictionary<string, MatrixElement>();
//Pseudo-code
public static void UpdateValue(string key)
{
KeyValuePair<string, MatrixElement> keyValuePair = matrixElements[key];
lock (keyValuePair.Key)
{
keyValuePair.Value = SomeMeanMethod();
}
}
这会在法庭上成立还是失败?我只希望字典中的每个值都被独立锁定,因此锁定(和更新)一个值不会锁定其他值。另外我知道锁定将持续很长时间 - 但数据在完全更新之前将无效。
【问题讨论】:
-
不是一个答案,但你知道如果你已经有了这对,你可以使用 pair.Value 而不是在字典上再次调用 operator[]?
-
其实我试过了,但是值是只读的还是我的IDE告诉我的?
-
你不能修改 foreach 元素
-
你想避免的并发到底在哪里?如果您在多个线程中运行循环,第一个线程将锁定第一个键,所有其他线程将在点击第一个键时阻塞。所以我不明白你想要解决的问题。你能澄清你在这方面的问题吗?
-
TToni:你说得对,但我这里的例子是简化的——它们不会在循环中更新——这只是我做的一个坏例子——每个线程可能会更新不同的值——或者相同我想避免。
标签: c# dictionary locking