だから、私は持っていますDictionary<KType,VType> Foo
私が持っている1つのスレッドで:
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 を呼び出す必要はありません。