如何退出如果锁定

本文关键字:如果 锁定 退出 何退出 | 更新日期: 2023-09-27 18:12:15

我正在尝试创建一个线程安全的方法。我用下面的代码来测试它。

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) { ...}应该转换成

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

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

我以前没有在Monitor上使用TimeSpan.Zero,所以先试试。