문제
나는 이것이 매우 멍청한 질문이라고 생각합니다. C#의 중단 가능한 잠금 문의 올바른 구문은 무엇입니까? 예를 들어 잠금을 얻습니다. 잠금 코드가 마감되기 전에 잠금이 중단되면 Enclosing 메소드에서 False를 반환하십시오. 아마도 완전히 잘못된 용어 일 것입니다 ... 감사합니다.
해결책
시간 초과를 가질 수 있습니다 Aquiring 잠금을 사용하는 잠금 Monitor.TryEnter
; 마찬가지로, 자물쇠 안에서 당신은 같은 일을 할 수 있습니다. Monitor.Wait
/Monitor.Pulse
잠금을 일시적으로 산출하려면 그대로 방해받을 수 없습니다.
메인 타임 인터럽트는 스레드에서 잠자리에있을 수 있으며, 이는 스레드와 중단 될 수 있습니다.
당신이 달성하려는 것은 정확히 무엇입니까? 더 많은 맥락을 통해 우리는 아마도 더 도움이 될 것입니다 ...
다른 팁
"중단"이 의미하는 바는 불분명합니다.
예외에 의한 중단
private bool SomeLockingMethod(object foo)
{
// Verify foo is valid
try
{
lock(foo)
{
while(something)
{
// Do stuff
Thread.Sleep(1); // Possibly yield to another
// thread calling Thread.Interrupt
}
}
return true;
}
catch(ThreadInterruptedException ex)
{
// Handle exception
}
return false;
}
만약 return true
도달하지 못하고 잠금이있는 동안 무슨 일이 일어났습니다. foo
개최되었고 코드가 반환됩니다 false
. 잠금 장치는 어느 쪽이든 자동으로 해제됩니다.
다른 스레드는 호출 하여이 스레드를 방해 할 수 있습니다 Thread.Interrupt
.
코드에서 "중단"
코드를 "방해하는"사람이라면 간단 할 수 있습니다.
private bool SomeLockingMethod(object foo)
{
// Verify foo is valid
lock(foo)
{
// Do stuff
if(shouldInterrupt)
{
return false;
}
// Do more stuff
}
return true;
}
다시 말하지만, "중단"이 있는지 여부에 관계없이 잠금 장치가 자동으로 해제됩니다.
다른 사람이 자물쇠를 획득하려고했기 때문에 중단
아마도 이것은 당신이 찾고있는 것입니다. 이 경우 다른 것을 사용하고 싶을 수도 있습니다. Semaphore
또는 ManualResetEvent
.
당신이 여기에 무엇을하려고하는지 잘 모르겠습니다. 의 목적 lock
진술은 일관된 행동을 보장 할 수 있도록 중단되지 않아야한다는 것입니다.
여기서 무엇을 성취하려고합니까?
또한 2.0에 추가 된 트랜잭션 범위를 살펴볼 수도 있습니다. 이는 원하는 것일 수 있습니다 (의문의 모호성으로 인해 알려지지 않았습니다). 일부 작업을 시도한 다음 해당 작업이 제대로 완료되지 않은 경우 롤백 할 수 있습니다.
여기를 봐 자세한 사항은.