LOCK时如何退出

How to exit if LOCK

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

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());
        }
    }

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

您应该使用 Monitor Class,它比锁具有更多的功能。标准锁用法基本相同。

使用TryEnter函数查看是否可以获取锁。如果没有,则退出线程。不要忘记手动释放锁。

实际上,lock (objLock) { ...} wire 被转换成

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

也许你可以使用 Monitor.TryEnter(objLock, TimeSpan.Zero) 而不是 Monitor.Enter(objLock) 来尝试不等待地获取锁。

我之前没有用过TimeSpan.Zero 和Monitor,所以先试试吧。