다음과 같은 상황이 있습니다. 개체에 대한 상호 배제를 원합니다.잠금 및 모니터를 동일한 개체에서 안전하게 사용할 수 있습니까?
지금까지 내가 normaly 지금은 또 다른 스레드에서 호출 할 수있는 방법이 잠금 객체
object lockObject = new object();
...
method1: lock(lockObject) { CODE1 }
을 사용합니다. 그것은 알 수없는 시간 동안 차단되어서는 안되며, 정의 된 시간 내에 응답을 제공해야합니다. 내가 모니터를 사용하는 것이이 경우
지금method2:
try{
Monitor.TryEnter(lockObject , 20000, ref lockTaken);
if (lockTaken) {CODE2}
}
catch(...){...}
finally
{
if (lockTaken) Monitor.Exit(timerLock);
}
처럼 내 질문은 : 잠글 수와 모니터는 lockobject가 동일한 경우와 같은 방법으로 혼합되어 서로 서로를 배제, 또는하고자 할 모든 잠금 장치를 모니터로 변경해야합니다.
그래서 같은 토큰이 "잠겨"있거나 모니터가 객체에 대한 다른 토큰을 만든 다음 잠금을 만들까요?
한 눈에 내가 응용 프로그램이 동시에 두 코드에서 실행되는 것을 볼 수 없습니다. 그러나 CODE1과 CODE2가 병렬로 실행되는 타이밍 문제가 있는지 여부는 알 수 없습니다.
나는 당신의 고통을 느낍니다. 나는 종종 'lock' 키워드가 어떻게 든 타임 아웃을 걸렸 으면 좋겠다. –