C 執行緒同步之排它鎖 Monitor監視器類

2021-09-07 08:42:22 字數 1860 閱讀 6271

一、monitor類說明,提供同步訪問物件的機制。

1.位於system.threading命名空間下,mscorlib.dll程式集中。

2.monitor通過獲取和釋放排它鎖的方式實現多執行緒的同步問題。

3.monitor實現當前程序內的多執行緒的同步,和lock語句的功能類似。

4.當前為靜態類,使用簡單

5.依賴的鎖定物件和lock語句中類似,同樣需要引用型別、建議私有、唯讀、靜態

定義**:

//

//摘要:

//提供同步訪問物件的機制。

[comvisible(true

)]

public

static

class monitor

二、常用方法說明1.enter(obj)方法 在指定物件上獲取排它鎖。

2.exit(obj)   釋放指定物件上的排他鎖。

3.isentered(obj) 判斷當前執行緒是否已經持有排它鎖

4.tryenter(object obj, timespan timeout)  在指定的時間量內嘗試獲取指定物件上的排他鎖。

5.wait(object obj) 釋放物件上的鎖並阻止當前執行緒,直到它重新獲取該鎖。

6.pulse(object obj) 通知等待佇列中的執行緒鎖定物件狀態的更改。

7.pulseall(object obj)  通知所有的等待執行緒物件狀態的更改。

三、示例說明一:

說明:多執行緒累加數值,解決同步問題

private

readonly

static

object _mylock = new

object

();static

int count = 0

;static

void

countadd()

monitor.exit(_mylock);

//釋放排它鎖

}public

static

void

testone()

});}

}

1.如果不使用排它鎖處理,會出現資料異常

2.使用鎖定結果會正常

四、借助於using(){} 塊實現鎖定處理

1.此場景在事務處理中可能會用到,保證同乙個事務,如果乙個執行緒開啟操作,其他執行緒對當前事務操作等待。

2.此場景對於外部使用,不需要考慮多執行緒問題

1.繼承了idisposable介面的封裝

class

addhelper : idisposable

public

void

addcount()

}public

void

dispose()

}

2.呼叫**塊

public

static

void

testtwo()

thread.sleep(

500 *i);

}});}}

更多參考:

c# using 關鍵字使用整理

entiryframework中事務操作(二)

官方參考:

C 樂觀鎖 悲觀鎖 共享鎖 排它鎖 互斥鎖

悲觀鎖 pessimistic lock 顧名思義,就是很悲觀,每次去拿資料的時候都認為別人會修改,所以每次在拿資料的時候都會上鎖,這樣別人想拿這個資料就會block直到它拿到鎖。傳統的關係型資料庫裡邊就用到了很多這種鎖機制,比如行鎖,表鎖等,讀鎖,寫鎖等,都是在做操作之前先上鎖。通過 jdbc 實...

執行緒同步之互斥鎖

為什麼要執行緒同步?當多執行緒共享相同的記憶體的時候,需要每乙個執行緒看到相同的檢視。當乙個執行緒被修改時,其他的執行緒也可以修改或者讀取這個變數,所以就需要對這些執行緒同步,保證不會訪問到無效的變數。舉個例子 由此可見,執行緒同步的重要性。執行緒同步之互斥鎖的函式 1.include 2.int ...

c 執行緒同步各類鎖

1 原子操作 interlocked 所有方法都是執行一次原子讀取或一次寫入操作。2 lock 語句 避免鎖定public型別,否則例項將超出 控制的範圍,定義private物件來鎖定。3 monitor實現執行緒同步 通過monitor.enter 和 monitor.exit 實現排它鎖的獲取和...