【发布时间】:2013-06-04 23:41:08
【问题描述】:
所以,我有一个Dictionary<KType,VType> Foo
在一个线程中我有:
void Thread1() {
...
if (!Foo.TryGetValue(key, out v)) {
Foo.Add(new VType());
}
...
}
Foo 唯一一次被另一个线程访问是 TryGetValue。
那么,我需要锁定多少钱?我可以这样做吗:
void Thread1() {
...
if (!Foo.TryGetValue(key, out v)) {
lock (syncobj) {
Foo.Add(new VType());
}
}
...
}
void Thread2() {
...
lock (syncobj) {
Foo.TryGetValue(key, out v))
}
...
}
Thread1 占程序计算的 90%,TryGetValue 被多次调用。因此,最好不要每次都调用 lock。
【问题讨论】:
-
哇...我在谷歌上没找到,我也在找。我猜我看到的一切都是 2010 年之前的。
标签: c# dictionary thread-safety trygetvalue