麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > C# > 正文

C#中使用Lock關鍵字進行線程同步

2023-05-17 11:41:55
字體:
來源:轉載
供稿:網友

lock 關鍵字可以用來確保代碼塊完成運行,而不會被其他線程中斷。這是通過在代碼塊運行期間為給定對象獲取互斥鎖來實現的。

lock 語句以關鍵字 lock 開頭,它有一個作為參數的對象,在該參數的后面還有一個一次只能由一個線程執行的代碼塊。例如:

public void Function()
{
    System.Object lockThis = new System.Object();
    lock(lockThis)
    {
        // Access thread-sensitive resources.
    }
}

提供給 lock 關鍵字的參數必須為基于引用類型的對象,該對象用來定義鎖的范圍。在上例中,鎖的范圍限定為此函數,因為函數外不存在任何對該對象的引用。

嚴格地說,提供給 lock 的對象只是用來唯一地標識由多個線程共享的資源,所以它可以是任意類實例。然而,實際上,此對象通常表示需要進行線程同步的資源。例如,如果一個容器對象將被多個線程使用,則可以將該容器傳遞給 lock,而 lock 后面的同步代碼塊將訪問該容器。只要其他線程在訪問該容器前先鎖定該容器,則對該對象的訪問將是安全同步的。

通常,最好避免鎖定 public 類型或鎖定不受應用程序控制的對象實例。例如,如果該實例可以被公開訪問,則 lock(this) 可能會有問題,因為不受控制的代碼也可能會鎖定該對象。這可能導致死鎖,即兩個或更多個線程等待釋放同一對象。出于同樣的原因,鎖定公共數據類型(相比于對象)也可能導致問題。鎖定字符串尤其危險,因為字符串被公共語言運行庫 (CLR)“暫留”。這意味著整個程序中任何給定字符串都只有一個實例,就是這同一個對象表示了所有運行的應用程序域的所有線程中的該文本。因此,只要在應用程序進程中的任何位置處具有相同內容的字符串上放置了鎖,就將鎖定應用程序中該字符串的所有實例。因此,最好鎖定不會被暫留的私有或受保護成員。某些類提供專門用于鎖定的成員。例如,Array 類型提供 SyncRoot。許多集合類型也提供 SyncRoot。

所以,使用lock應該注意以下幾點:

(1)如果一個類的實例是public的,最好不要lock(this)。因為使用你的類的人也許不知道你用了lock,如果他new了一個實例,并且對這個實例上鎖,就很容易造成死鎖。

(2)如果MyType是public的,不要lock(typeof(MyType))

(3)永遠也不要lock一個字符串

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 中国女人内谢8xxxxxx在 | 国产成人精品二区 | 国产69精品久久久久孕妇黑 | 曰韩在线视频 | 国av在线| 91网站在线播放 | 91九色网址| 欧美亚洲一区二区三区四区 | 美女亚洲综合 | 国产欧美精品综合一区 | 99国语露脸久久精品国产ktv | 国产无遮挡一区二区三区毛片日本 | av一道本 | av中文字幕免费在线观看 | 一本一道久久久a久久久精品91 | 成人偷拍片视频在线观看 | 黄色片网站在线免费观看 | 黄色av免费网站 | av日韩一区二区 | 双性帝王调教跪撅打屁股 | 看个毛片| 久久久久久久久国产 | 新久久久久久 | 日本成人在线免费 | 久久久久国产成人免费精品免费 | 亚洲一区二区免费 | 91精品国产91久久久久久吃药 | 日本aaaa片毛片免费观蜜桃 | 91美女视频在线观看 | 国内精品久久久久久影视8 嫩草影院在线观看网站成人 | 国产手机av在线 | 欧美日韩在线免费观看 | 久久久一区二区三区精品 | bt 自拍 另类 综合 欧美 | 99热1| 久久出精品 | 99re热精品视频| 欧美成人小视频 | 圆产精品久久久久久久久久久 | 黄色片网站免费 | 美国黄色毛片女人性生活片 |