lock C#에서 "잠금 시도, 시간 초과 된 경우 건너 뛰기"작업이 있습니까?



c# process lock (4)

개체를 잠글려고 할 때, 잠긴 개체가 잠겨 있으면 (시간 초과 후 또는 개체가없는 경우) 계속 진행해야합니다.

C # 잠금 문이 차단되었습니다.


Answer #1

에드의 말이 맞아. 그냥 Monitor.Exit() 을 호출하는 것을 잊지 마십시오. 적절한 정리를 보장하려면 try-finally 블록을 사용해야합니다.

if (Monitor.TryEnter(someObject))
{
    try
    {
        // use object
    }
    finally
    {
        Monitor.Exit(someObject);
    }
}

Answer #2

Monitor.TryEnter() 사용할 수 있다고 생각합니다.

lock 문은 Monitor.Enter() 호출과 try catch 블록으로 변환됩니다.



Answer #4

동일한 문제가 발생 using IDisposable을 구현 한 TryLock 클래스를 TryLock 다음 using 문을 using 하여 잠금 범위를 제어합니다.

public class TryLock : IDisposable
{
    private object locked;

    public bool HasLock { get; private set; }

    public TryLock(object obj)
    {
        if (Monitor.TryEnter(obj))
        {
            HasLock = true;
            locked = obj;
        }
    }

    public void Dispose()
    {
        if (HasLock)
        {
            Monitor.Exit(locked);
            locked = null;
            HasLock = false;
        }
    }
}

그런 다음 다음 구문을 사용하여 잠급니다.

var obj = new object();

using (var tryLock = new TryLock(obj))
{
    if (tryLock.HasLock)
    {
        Console.WriteLine("Lock acquired..");
    }
}




locking