繁体   English   中英

c#线程行为

[英]c# threading behaviour

谁能解释为什么这样有效:

    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(如下所示),则会失败:

    String ready_lock = "Hello";
    String thread_lock = "Hello";

一段时间以来我一直困扰着我。 谢谢 :)

当你将它们都设置为“Hello”时,由于字符串实习,你最终会得到两个具有相同值的变量。 这就像做

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

所以基本上就是“如果你有两个锁涉及它们,它们可以被不同的线程独立锁定,但只有一个锁,只有一个线程可以一次获取锁。”

它是一种优化,类似的const字符串被视为同一个对象,只需更改你的代码:

String ready_lock = "1)Hello";
String thread_lock = "2)Hello";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM