私は適切に理解できないコードが少しあります。私が持っている問題は、いくつかの時点で時間内のすべてのスレッドがあるように見えるということですC#モニタクラスのマルチスレッドの問題 - 生存可能ですか?
lock (lockObject)
{
if (!Monitor.TryEnter(lockObject))
Monitor.Wait(lockObject);
//do stuff...
Monitor.PulseAll(lockObject);
}
Monitor.Exit(lockObject);
:問題は、プログラムがマルチスレッドので、私はこれを書いて同期させる必要があるコードのビットがある範囲内にあるということです眠っている - 誰かが理由を伝えることができる?プログラムはほとんど無駄にCPUを消費し続けますが、作業は行われません。プログラムをトレースすると、ある時点ではスレッドはアクティブになっていませんが、多くのスレッドがスリープ状態にあることがわかりました。ほとんどの場合(開発者の場合は - 常に)モニターの前に0.5mが置かれていますが、自分では理解できません... ...
私 - 事前に感謝します。
LockObjectは、あなたがMonitor.TryEnterをオンにしているのと同じものをロックしていますか、またはLockObject型をロックしていますか? –
はい - これは古典的なタイプミスです – Gambrinus