如果LOCK如何退出

时间:2015-09-11 13:06:26

标签: c# locking

我正在尝试制作一个线程安全的方法。我有这个代码来测试它。

private static readonly Object objLock = new Object();

    static void Main(string[] args)
    {

        // Create ten new threads.
        for (int i = 0; i < 10; i++)
        {
            ThreadStart start = new ThreadStart(LockTest);
            new Thread(start).Start();
        }

        Console.Read();
    }

    public static void LockTest()
    {
        lock (objLock)
        {
            Thread.Sleep(1000);
            Console.WriteLine(TimeSpan.FromMilliseconds(Environment.TickCount).Seconds.ToString());
        }
    }

这样可行,但我想要做的是如果Lock已就位,我需要其他线程退出而不是等待并在释放锁时执行代码。这可能吗?感谢。

2 个答案:

答案 0 :(得分:1)

您应该使用Monitor Class,它提供的功能比锁定更多。对于标准锁定用途,它基本相同。

使用TryEnter功能查看您是否可以获取锁定。如果没有,那么就退出线程。不要忘记手动释放锁。

答案 1 :(得分:0)

实际上,lock (objLock) { ...}将被转换为

Monitor.Enter(objLock ); try { ... } finally { Monitor.Exit(objLock); }

您可以使用Monitor.TryEnter(objLock, TimeSpan.Zero)代替Monitor.Enter(objLock)尝试获取锁定,而无需等待。

之前我没有使用TimeSpan.Zero,请先尝试使用。