編寫安全的多執行緒C 程式

2021-08-30 07:31:20 字數 1252 閱讀 2107

(1)monitor類(主要是靜態方法) 

monitor.enter(obj)

//獲得加在物件obj上的鎖

... monitor.exit(obj)

//釋放鎖

//上面兩句之間的**相當於lock(obj)

monitor.tryenter(obj)

//該方法立即返回,如果返回值為false,則接下來不需要monitor.exit(obj)。

//以下幾個方法用於執行緒間的互動 ==》 解決同步依賴

monitor.wait(obj)

//等待脈衝訊息。釋放物件上的鎖並阻塞當前執行緒,以後只有其它執行緒呼叫pulse或pulseall時才會給它再次獲得鎖的機會

monitor.pulse(obj)

//發射脈衝訊息( 只有得到鎖後才能發射,而且發射不會自動釋放鎖)

monitor.pulseall(obj)

(3)lock語句

lock

(obj)

實現單寫多讀程式的鎖。

acquirereaderlock()

//當沒有寫程式執行緒占用鎖時,就可獲得鎖

acquirewriterlock()

//當沒有任何讀寫程式執行緒占用鎖時,才可獲得鎖

releasereaderlock() releasewriterlock()

(5)manualresetevent

set()方法將狀態設定為有訊號 reset()將其設定為無訊號 waitone()將阻塞到其有訊號為止,若呼叫waitone的時刻就是有訊號的,將不會阻塞 

同步乙個由許多執行緒共享的變數。

decrement(

refint

);//

使變數減1

increment(

refint

);//

使變數加1

//以上兩個方法僅針對類int變數

exchange(

refobject

, object

);

二.建立執行緒安全的物件

hashtable h 

=hashtable.synchronized(

newhashtable()) ;

arraylist等容器也提供類似操作。

**:

多執行緒 使用鎖編寫執行緒安全的程式

對上乙個例子的改進。1 競爭資源 public class student2 設定物件和獲取物件的執行緒 為了展示效果,我們使用了迴圈。public class setthread implements runnable override public void run else x public ...

C 多執行緒 執行緒安全

當使用多執行緒時,可能存在同時訪問乙個變數,導致變數被汙染問題,所以需要通過程式設計克服這個問題。採用多個執行緒,分別記數,然後檢視最終計算結果,如下 include include include 計數全域性變數 long cnt 0 計數程式 void counter int main int ...

C 編寫的多執行緒埠掃瞄程式

using system using system.drawing using system.collections using system.componentmodel using system.windows.forms 增加的如下.using system.data using system...