현재 하나의 스레드에서 여러 스레드가 스레드 관리자의 큐에 무엇인가를 추가 할 때까지 기다리기 위해 ManualResetEvent를 사용 중입니다. 스레드 관리자가 수동 재설정 이벤트를 사용하여 신호를 받으면 추가 된 항목을 대기열에서 제외하고 추가 처리를 수행합니다. 내 유일한 문제는 여러 세트가 트리거되면 다른 대기열 항목이 처리되지 않는다는 것입니다. 여기에 내 해결 A 점의 큐 크기 조건을 추가하는 것입니다ManualResetEvent 크기가 다중 스레드를 기다리는 데 충분합니까?
while (IsThreadRunning)
{
// A: My workaround is to check if queue has item, if not then wait for other thread to set the event
if (DataQueue.Count <= 0)
{
ResetEvent.WaitOne();
}
// B: At this point two thread added item to the queue and did ResetEvent.Set() twice.
if (DataQueue.Count > 0)
{
DataQueue.Dequeue();
}
// Reset the event to avoid processor hog
ResetEvent.Reset();
}
(점 B 참조). 데드락을 피하기 위해 다른 방법이 있습니까?
참고 : ManualResetEvent 사용에 대한 예제에서 제공되는 일반적인 시나리오에는 단일 스레드에서 이벤트를 기다리는 다중 스레드가 있지만 (ManualResetEvent.Set) 이벤트가 여러 스레드에서 트리거됩니다. 이 시나리오에 사용되는 다른 클래스가 있습니까?
간단히 잠시 시간을 바꾸지 않는 이유는 무엇입니까? –