2016-08-02 3 views
0

저는 SO와 웹에서 답을 찾아 보았지만 다른 언어 (C++, python) 만 찾았으며 읽기가 명확한 대답을 제공하지 않았습니다.스레드가 죽으면 잠금 상태가됩니다.

스레드가 잠긴 코드 블록을 가지고 있고 잠긴 블록 내부에있는 동안 어떤 이유로 스레드가 죽으면 (강제로 종료 됨) 잠금이 여전히 적용됩니다 (즉, 다른 스레드는 강제로 실행되지 않습니다. 그 잠금 장치를 사용할 수 있어야합니까?)

예를 들면 : 스레드 A가 죽으면 스레드 B가 그것을 할 수있을 것이다,는 foobar 전화를 시도

class myClass { 
    private static object myLock = new Object(); 

    public void foobar() 
    { 
     lock(myLock) 
     { 
      //code 
     } 
    } 
} 

경우? 아니면 교착 상태에 빠지겠습니까?

+0

"나는 SO와 웹을 둘러 보았습니다."- 좋아하는 검색 엔진에서 "C# lock exception"을 찾아보십시오. – Dennis

+0

수정 됨. 나는 이것이 복제본이라고 생각하지 않는다. 나는 예외 부분을 제거했고, 예외없이 스레드 자체가 잠금 상태에서 죽는 경우에 어떤 일이 발생하는지 더 관심이 있습니다. 스레드가 종료되면 잠금 장치가 해제됩니까? –

답변

0

lock 문은 아래에 표시된 것처럼 Monitor.Enter Monitor.Exit 조합을 사용하여 try-finally로 변환되고 예외가 발생하거나 잠금이 해제되도록 두 경우 모두에서 실행됩니다. Eric Lippertanswer은 C#의 잠금 구현을 설명합니다.

System.Threading.Monitor.Enter(x); 
try { 
    ... 
} 
finally { 
    System.Threading.Monitor.Exit(x); 
} 
0

lock(myLock) 
{ 
    //code 
} 

스레드가 죽으면 그렇다면

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

에 해당, 다음 예외가 발생 될 것이며 finally 문은 객체 myLock에서 잠금을 해제합니다.

Monitor class의 설명서를 참조하십시오. 잠금 개념에 대한 설명과 샘플이 있습니다.

관련 문제