2017-10-06 68 views
2

鎖定參數中對象的用途是什麼。這裏是一個例子:鎖定語句參數中對象的用途

public class TestThreading 
{ 
    private System.Object lockThis = new System.Object(); 

    public void Process() 
    { 

     lock (lockThis) 
     { 
      // Access thread-sensitive resources. 
     } 
    } 

} 

......這是否'lockThis'對象將任何東西傳遞到鎖體。爲什麼我不能在參數中使用沒有對象的Lock語句。

+1

您需要* some *變量來跟蹤哪個線程擁有鎖定以及輸入的頻率。鎖定狀態。 System.Object是做所有這些事情的看似不充分的對象類型,但它是有能力的。許多程序員認爲,.NET框架應該爲這種變量提供一個專用類型來提高清晰度。你可以做一個:public class LockState:object {}。 –

+0

謝謝。相反,如果我將「Thread.CurrentThread.ManagedThreadId」傳遞給鎖定語句,是否有意義。 – cembo

+1

這將是災難性的。你最好研究一下,否則線程會活着吃你。 –

回答

3

傳遞給鎖定語句的對象可以被認爲是鎖的標識符。對於任何對象,在任何給定的時間只有一個線程可以獲得該對象的排他鎖。通過允許將對象傳遞給鎖定語句,可以針對關鍵代碼的不同區域使用不同的對象。

Monitor.Enter文檔比使用lock聲明文檔提供了對物體使用的更好描述。