코드가 약간 있습니다. 제대로 파악할 수 없습니다. 문제는 프로그램이 멀티 스레드라고하고있다 이내에 동기화해야합니다 코드의 비트는 내가 쓴 :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이거나 LockObject 유형을 잠그고 있습니까? –
예 - 고전적인 오타였습니다 – Gambrinus