MFC MFC同步類總結

2021-07-22 04:05:58 字數 1709 閱讀 2652

乙個csinglelock

類物件代表一種訪問控制機制,這種機制用於控制在乙個多執行緒程式中對乙個資源的訪問。為了使用同步類

csemaphore

、cmutex

、ccriticalsection

、cevent

所建立的同步物件,你必須建立乙個

csinglelock

或者cmultilock

物件來等待和釋放這個同步物件。當你只需要每次等待乙個物件時,則用

csinglelock

,否則用

cmultilock

。要使用乙個csinglelock

物件,在被控制資源的類中的乙個成員函式內部呼叫

csinglelock

的建構函式。然後呼叫

islock

成員函式來確定這個資源是否可用。如果資源是可用的,則繼續該成員函式的其餘部分。

[cpp]view plain

copy

csinglelock::csinglelock( csyncobject* pobject, bool binitiallock = false );  

pobject 指向要被訪問的同步物件。不能是null  

binitiallock    指示是否要在最初嘗試訪問所提供的物件  

bool csinglelock::islocked()   

返回值:如果物件被加鎖則返回非零值;否則返回0。 此成員函式用來確定與csinglelock物件相關的物件是否沒有發訊號(不能使用)。   

bool csinglelock::lock( dword dwtimeout = infinite );   

返回值:如果函式成功則返回非零值;否則返回0。   

引數:dwtimeout    指定等待要被利用的同步物件的時間數量。如果是infinite,則lock等待直到該物件在返回之前可用。  

說明:此成員函式用來獲取對由同步物件控制的資源的訪問,這個訪問要提供給csinglelock建構函式。如果同步物件是可用的,lock將成功返回,而且執行緒擁有了該物件。如果此同步物件是不可用的,則lock將等待此同步物件在dwtimeout引數指定的時間內變為可用。如果此同步物件在指定的時間內沒有變為可用的,則lock返回失敗。  

bool  csinglelock::unlock( );  

bool  csinglelock::unlock( long lcount, lplong lprevcount = null );  

返回值:如果函式成功則返回非零值;否則返回0。  

引數: lcount:要釋放的訪問數目。必須要大於0。如果指定的數量要導致物件的計數超過它的最大值,則計數不改變,並且函式返回false。  

lprevcount:指向乙個用來接收同步物件的先前計數的變數。如果是null,則不返回先前的計數。  

說明:此成員函式用來釋放由csinglelock擁有的同步物件。由csinglelock的析構函式類呼叫這個函式。如果你需要釋放乙個訊號的多於乙個的訪問計數,可以使用unlock的第二種形式,並指定要釋放的訪問數目。   

在mfc

中,具有等待功能的類

csinglelock

和cmultilock

封裝了win32

中的等待函式

waitforsingleobject()

和waitformultipleobjects() 。

同步類容器

同步類容器都是執行緒安全的,但在某些場景下可能需要加鎖來保護復合操作。復合操作如 迭代 反覆訪問元素遍歷萬容器中的所有元素 跳轉 根據制定的順序找到當前愛你元素的下乙個元素 以及條件運算。這些復合操作在多執行緒併發地修改容器時,可能會表現出意外的行為,最經典的便是concurrentmodifica...

同步工具類

同步工具類可以是任何乙個物件,只要它根據其自身的狀態來協調執行緒的控制流。儲存物件的容器,還能協調生產者和消費者等執行緒之間的控制流 take和put等方法將阻塞,直到佇列達到期望的狀態 佇列即非空,也非滿 相當於一扇門 在閉鎖到達結束狀態之前,這扇門一直是關閉的,並且沒有任何執行緒能通過,當到達結...

同步工具類

同步工具類可以是任何乙個物件,只要它根據其自身的狀態來協調執行緒控制流。阻塞佇列 blockingqueue 可以作為同步工具類,其他型別的同步工具類還包括訊號量 semaphore 柵欄 barrier 以及閉鎖 latch 在平台類庫中還包含其他一些同步工具類的類,如果這些類還無法滿足需要,那麼...