所以,我有一个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 。