C#线程行为

扫码查看

任何人都可以解释为什么这可行:

    Object ready_lock = new Object();
    Object thread_lock = new Object();
    public static bool able_to_get_lock = false;

    public void GetThreadLock()
    {
        if (Monitor.TryEnter(thread_lock,2))
        {
            able_to_get_lock = true;
        }
    }

    [TestMethod]
    public void ThreadingModelTest()
    {
        Monitor.Enter(ready_lock);
        Thread t1 = new Thread(new ThreadStart(GetThreadLock));
        t1.Start();
        Thread.Sleep(400);
        Assert.IsTrue(able_to_get_lock);

    }

但是如果我将锁定对象的对象类型更改为字符串(如下所示),它将失败:
    String ready_lock = "Hello";
    String thread_lock = "Hello";

现在已经让我感到困惑了。谢谢 :)

最佳答案

当将它们都设置为“Hello”时,由于字符串插入,最终两个变量都具有相同的值。就像在做

Object ready_lock = new Object();
Object thread_lock = ready_lock;

因此,基本上是一种情况:“如果涉及到两个锁,它们可以被不同的线程独立地锁定,但是只有一个锁,一次只能有一个线程获得该锁。”

关于C#线程行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3449451/

10-09 08:43
查看更多