문제

나는 이것이 매우 멍청한 질문이라고 생각합니다. 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에 추가 된 트랜잭션 범위를 살펴볼 수도 있습니다. 이는 원하는 것일 수 있습니다 (의문의 모호성으로 인해 알려지지 않았습니다). 일부 작업을 시도한 다음 해당 작업이 제대로 완료되지 않은 경우 롤백 할 수 있습니다.

여기를 봐 자세한 사항은.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top