C 多執行緒程式設計例項實戰 2

2022-08-25 00:18:13 字數 847 閱讀 1353

釋放閱讀鎖的函式原型為:public void releasereaderlock()。函式定義如下:

public void releasereaderlock()

bool breader = true;  switch( flag ) 

if( !breader ) 

return; 

thread.setdata( slot, lockflags.none ); 

m_mutex.waitone(); 

autoresetevent autoresetevent = null; 

this.m_nactive --; 

if( this.m_nactive == 0 ) 

else if( this.m_nwaitingwriters > 0)    

} m_mutex.releasemutex();    

if( autoresetevent != null )    

autoresetevent.set();    

} 釋 放閱讀鎖時,首先判斷當前執行緒是否擁有閱讀鎖(通過執行緒區域性儲存的標誌),然後判斷是否有等待的閱讀執行緒,如果有,先將當前活動執行緒加1,等待閱讀執行緒數 目減1,然後置事件為有訊號。如果沒有等待的閱讀執行緒,判斷是否有等待的寫入執行緒,如果有則活動執行緒數目減1,等待的寫入執行緒數目減1。釋放寫入鎖與釋放 閱讀鎖的過程基本一致,可以參看源**。 

注意在程式中,釋放鎖時,只會喚醒乙個閱讀程式,這是因為使用autoresetevent的原歷,讀者可自行將其改成manualresetevent,同時喚醒多個閱讀程式,此時應令m_nactive等於整個等待的閱讀執行緒數目。

測試

C 多執行緒程式設計例項實戰 1

問題的提出 所謂單個寫入程式 多個閱讀程式的執行緒同步問題,是指任意數量的執行緒訪問共享資源時,寫入程式 執行緒 需要修改共享資源,而閱讀程式 執行緒 需要讀取資料。在這個同步問題中,很容易得到下面二個要求 1 當乙個執行緒正在寫入資料時,其他執行緒不能寫,也不能讀。2 當乙個執行緒正在讀入資料時,...

c 多執行緒程式設計(2)

1 建立事件物件 handle createevent lpsecurity attributeslpeventattributes sdboolbmanualreset reset typeboolbinitialstate initial statelpctstrlpname object na...

C 多執行緒程式設計簡單例項

using system using system.collections using system.collections.generic using system.threading 在開發中經常會遇到執行緒的例子,如果某個後台操作比較費時間,我們就可以啟動乙個執行緒去執行那個費時的操作,同時程...