簡體   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