CCriticalSection

類CCriticalSection的對象表示一個“臨界區”,它是一個用於同步的對象,同一時刻只允許一個執行緒存取資源或代碼區。

臨界區在控制一次只有一個執行緒修改數據或其它的控制資源時非常有用。例如,在鍊表中增加一個結點就只允許一次一個執行緒進行。通過使用CCriticalSection對象來控制鍊表,就可以達到這個目的。
在運行性能比較重要而且資源不會跨進程使用時,建議採用臨界區代替信號燈。有關在MFC中使用信號燈的詳細信息,請參閱CMutex。使用CCriticalSection對象之前,需要構造它。在構造函式返回後,就可以使用臨界區了。在使用完之後要調用UnLock函式。
存取由CCriticalSection控制的資源時,要在資源的存取函式中定義一個CSingleLock型的變數。然後調用加鎖對象的Lock成員函式(如CSingleLock::Lock)。此時,調用的執行緒要么獲得對資源的存取權,要么等待他人釋放資源等待加鎖,或者等待他人釋放資源,但又因為逾時而加鎖失敗。這樣就保證了一次只有一個執行緒在存取臨界資源。釋放資源只需調用成員函式UnLock(例如CSingleLock::Unlock),或讓鎖對象在作用範圍之外。
此外,可以單獨地建立一個CCriticalSection對象,並在存取臨界資源之前顯式地存取它。這種方式有助於保持代碼的清晰,但是更容易出錯,因為程式設計師要記住在存取臨界資源前加鎖,存取之後開鎖。
使用時必須包含頭檔案#include "afxmt.h"

相關詞條

熱門詞條

聯絡我們