2014-04-01 2 views
1

하나의 스레드 만 코드 블록을 실행할 수 있도록 잠금 메커니즘을 구현하고자합니다. 하지만 다른 스레드가 잠금 객체에서 대기하는 것을 원하지 않습니다. 잠긴 경우 아무 작업도 수행하지 않아야합니다. 표준 잠금 메커니즘과는 조금 다릅니다.C의 잠금 메커니즘

if (block is not locked) 
{ 
    // Do something 
} 
else 
{ 
    // Do nothing 
} 

C#에서이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 대신 잠금을 사용하는

+0

응용 프로그램 내 하나의 스레드 또는 동일한 시스템/OS 내의 하나의 스레드 (예 : 동일한 응용 프로그램의 여러 인스턴스 교차)? – Caramiriel

+1

그냥 부울 값을 사용할 수 없습니까? – Tarec

+2

@Tarec : 어떻게 스레드로부터 안전해야합니까? – zerkms

답변

9

그런 다음, 당신은 Monitor Class를 사용해야합니다.

// Request the lock. 
if (Monitor.TryEnter(m_inputQueue, waitTime)) 
{ 
    try 
    { 
     m_inputQueue.Enqueue(qValue); 
    } 
    finally 
    { 
     // Ensure that the lock is released. 
     Monitor.Exit(m_inputQueue); 
    } 
    return true; 
} 
else 
{ 
    return false; 
} 

Marc Gravell는 바와 같이

Excerpt: Monitor.TryEnter() example from MSDN

, waitTime 선택적으로 제로 일 수있다. 다른 시나리오에 따라 10ms 또는 100ms가 더 효과적 일 수 있습니다.

+3

부수적으로 :'waitTime' *은 OP가 대기를 전혀 원하지 않는 경우 * 일 수 있습니다 –

0

사용 Monitor.TryEnter(lockObject, timespan) {....}