2009-09-30 3 views
0

AutoResetEvent가 프로세스 1에서 WaitOne을 호출하고 프로세스 2에서 다시 호출되고 프로세스 2가 동일한 AutoResetEvent에서 Set을 호출하면 프로세스 1에서 호출되기 전에 Process1에 대한 잠금이 해제되지 않아야합니다 2?이라는 이름의 EventWaitHandle 릴리스 주문

프로세스 1과 2를 실행하는 데 사용한 샘플 코드가 있습니다. 프로세스 1을 인수없이 실행하므로 wh.WaitOne()에서 중단됩니다. 프로세스 2를 인수로 실행하여 Set()을 호출합니다. 관찰 한대로 프로세스 2의 잠금이 프로세스 1 대신 해제되었습니다.

AutoResetEvent의 잠금 대기열이 처음에 처음 작동해야합니까? 잠금에서

class ThreadSafe 
{ 
    static EventWaitHandle wh = new EventWaitHandle(false, EventResetMode.AutoReset, "abc"); 

    static void Waiter(String t) 
    { 
      wh.WaitOne(); 
    } 

    static void Main(string[] args) 
    { 
     new Thread(delegate() { Waiter("a"); }).Start(); 

     if (args.Length > 0) 
     { 
      wh.Set(); 
     } 
    } 
} 

답변

1

'공정성'이되지되고, 난 단지 this link을 찾을 수 있지만, 좀 더 최근의/관련 기사를 읽고 기억합니다. 올바르게 기억하면 .NET의 모든 잠금 메커니즘이 FIFO 동작을 포기합니다.

사기 : FIFO 순서에 의존해서는 안됩니다. 멀티 스레딩은보기보다 어렵습니다.