關於C 的Lock關鍵字實現執行緒安全的單例模式

2021-10-07 12:11:32 字數 514 閱讀 7693

protected

static

readonly

object m_staticsyncroot;

public

newstatic

ifacade instance

}}return m_instance;

}}

在上述**中,lock的外部和內部使用到了兩個看似重複的if判斷,兩者實際上都是有各自的功能的。

lock外部的if主要簡單的對m_staticsyncroot進行判空判斷,決定是否要進入lock語句塊。

在上文中黑體字突出的等待中可以發現,如果有多個執行緒同時執行上述**,第乙個執行緒進入lock塊進行操作時,其餘的執行緒都是在進入第乙個if後進入lock之前等待,第乙個進入lock塊的執行緒進行初始化結束之後,其實這時m_staticsyncroot已經指向某個例項了, 第二個進來的執行緒如果不進行判斷,則還會再次進行例項化,所以在lock裡面的if實際上是有用的。

關於lock的使用注意事項:

C 用lock 關鍵字進行執行緒互斥

lock 關鍵字將語句塊標記為臨界區,方法是獲取給定物件的互斥鎖,執行語句,然後釋放該鎖。註解 lock屬於使用者態的執行緒同步,所占用的開銷比核心態小 lock 關鍵字可確保當乙個執行緒位於 的臨界區時,另乙個執行緒不會進入該臨界區。如果其他執行緒嘗試進入鎖定的 則它將一直等待 即被阻止 直到該物...

描述C 多執行緒中 lock關鍵字

描述c 多執行緒中 lock關鍵字 本文介紹c lock 關鍵字,c 提供了乙個關鍵字lock,它可以把一段 定義為互斥段 critical section 互斥段在乙個時刻內只允許乙個執行緒進入執行,而其他執行緒必須等待。每個執行緒都有自己的資源,但是 區是共享的,即每個執行緒都可以執行相同的函式...

描述C 多執行緒中 lock關鍵字

本文介紹c lock關鍵字,c 提供了乙個關鍵字lock,它可以把一段 定義為互斥段 critical section 互斥段在乙個時刻內只允許乙個執行緒進入執行,而其他執行緒必須等待。每個執行緒都有自己的資源,但是 區是共享的,即每個執行緒都可以執行相同的函式。這可能帶來的問題就是幾個執行緒同時執...