lock:該關鍵字將語句塊標記為臨界區,方法是獲取給定物件的互斥鎖,執行語句,然後釋放該鎖。
舉例:
單件模式
public
class
singleton
public
static
singleton getinstance()}}
return
instance;}}
說明:
單間模式中就用到了lock,是一次只能有乙個例項。此例中syncroot若為null則會丟擲argumentnullexception異常,
所以總結如下:
1. lock的物件不能為null;
2. lock時如果有別的程序訪問lock變數或lock{}裡的內容,則不是跳過,而是等待,等待lock結束後再訪問;
3. msdn裡的一句話:
lock確保當乙個執行緒位於**的臨界區時,另乙個執行緒不進入臨界區。如果其他執行緒試圖進入鎖定的**,則它將一直等待(即被
阻 止),直到該物件被釋放;
4. lock(this)請不要使用,this指的是整個外層方法,當鎖住後導致別的程序也無法訪問該方法,應lock乙個不影響其他操作的私有對
象, 如static 的object 物件
例如單件模式中的syncroot ;
5. 在使用lock的時候,被lock的物件(locker)一定要是引用型別的,如果是值型別,將導致每次lock的時候都會將該物件裝箱
為 乙個新的引用物件(事實上如果使用值型別,c#編譯器(3.5.30729.1)在編譯時就會給出乙個錯誤)。
wllvm使用及注意事項
export llvm compiler llvm gcc export llvm gcc prefix export llvm compiler path path to llvm 2.9 release asserts bin 這裡不能填llvm gcc的路徑,不然在extract bc的時候會...
WFP TreeView使用及注意事項
最近接手wpf的專案,從0開始,做些積累 hierarchicaldatatemplate hierarchicaldatatemplate顧名思義,分層資料模板,就是用來定義分層資料樣式的模板,一般多用於menuitem和treeviewitem datatype指定模板用於哪種資料型別 item...
索引的使用及注意事項
索引是資料庫對原始資料的一列或多列進行排序的一種結構,分為聚集索引和非聚集索引。聚集索引就像書的目錄一樣,排序結構和原表的一致 而非聚集索引就像字典的偏旁查詢一樣,排序順序和字典的不一樣,只是指出它在哪一頁。索引又分為單列索引和聯合索引,單列索引很容易理解,就是對某一列進行排序。聯合索引就是對多列排...