C# Language잠금 문


통사론

  • 잠금 (obj) {}

비고

lock 문을 사용하면 코드 블록 내의 코드에 대한 서로 다른 스레드의 액세스를 제어 할 수 있습니다. 경쟁 조건을 방지하기 위해 일반적으로 사용됩니다 (예 : 컬렉션에서 항목을 읽고 제거하는 다중 스레드). 잠금은 다른 스레드가 코드 블록을 종료 할 때까지 대기하도록 스레드를 강제하므로 다른 동기화 방법으로 해결할 수있는 지연이 발생할 수 있습니다.

MSDN

lock 키워드는 주어진 객체에 대한 상호 배제 잠금을 얻고, 명령문을 실행 한 다음 잠금을 해제하여 명령문 블록을 중요한 섹션으로 표시합니다.

lock 키워드는 한 스레드가 다른 스레드가 critical 섹션에있는 동안 코드의 중요한 섹션에 들어가지 않도록합니다. 다른 스레드가 잠긴 코드를 입력하려고하면 객체가 해제 될 때까지 블록을 기다립니다.

모범 사례는 잠글 사설 개체를 정의하거나 모든 인스턴스에 공통된 데이터를 보호하기 위해 개인 정적 개체 변수를 정의하는 것입니다.


C # 5.0 이상에서 lock 문은 다음과 같습니다.

bool lockTaken = false;
try 
{
    System.Threading.Monitor.Enter(refObject, ref lockTaken);
    // code 
}
finally 
{
    if (lockTaken)
        System.Threading.Monitor.Exit(refObject);
}

C # 4.0 이하의 경우 lock 문은 다음과 같습니다.

System.Threading.Monitor.Enter(refObject);
try 
{
    // code
}
finally 
{
     System.Threading.Monitor.Exit(refObject);
}

잠금 문 관련 예