Linux學習之互斥量的封裝二 封裝臨界區

2022-08-28 18:12:06 字數 1471 閱讀 8464

本節在上一節的基礎上,利用區域性變數的構造和析構函式的特性,封裝了對臨界區的加鎖和解鎖操作,保證了程式(執行緒)在異常終止或中途退出的情況下也能正確解鎖,從而不會出現死鎖。

增加的臨界區類"clcriticalsection",其它源**同上一節。

標頭檔案:

view code

#ifndef clcriticalsection_h

#define clcriticalsection_h

class clmutex;

class clcriticalsection

;#endif

實現:

view code

#include "

clcriticalsection.h

"#include "

clmutex.h

"#include "

cllog.h

"#include "

clstatus.h

"clcriticalsection::clcriticalsection(clmutex *pmutex)

m_pmutex = pmutex;

clstatus s = m_pmutex->lock();

if(!s.issuccess())

}clcriticalsection::~clcriticalsection()

}}

注意,該類僅負責對互斥量的加鎖(加鎖時附帶了對互斥量的有效性檢測)和解鎖操作(實際還是呼叫clmutext的操作),而鎖的建立和銷毀仍由clmutex類完成(由構造和析構函式完成)。

測試:view code

#include 

#include

#include "

clthread.h

"#include "

clexecutivefunctionprovider.h

"#include "

clmutex.h

"#include "

clcriticalsection.h

"using

namespace std;

struct spara

;class clmyfunction : public clexecutivefunctionprovider

virtual ~clmyfunction()

void test()

virtual clstatus runexecutivefunction(void *pcontext)

catch(...)

return clstatus(0, 0);}};

int main()

pthread->waitfordeath();

delete p;

delete pthread;

delete myfunction;

return

0;}

Linux中的同步技術之互斥量

互斥量從本質上說就像是一把鎖,提供資源的保護訪問,互斥量有兩種狀態,鎖住 lock 與解鎖狀態 unlock 用來保證一段時間內只有乙個執行緒使用該共享資源。互斥量的資料型別為pthread mutex t,如果互斥鎖變數是靜態分配的,那麼一般將其初始化為常值pthread mutex initia...

Linux執行緒同步之互斥量(mutex)

互斥量 也稱為互斥鎖 出自posix 執行緒標準,可以用來同步同一程序中的各個執行緒。當然如果乙個互斥量存放在多個程序共享的某個記憶體區中,那麼還可以通過互斥量來進行程序間的同步。互斥量,從字面上就可以知道是相互排斥的意思,它是最基本的同步工具,用於保護臨界區 共享資源 以保證在任何時刻只有乙個執行...

Linux執行緒同步(一)之使用互斥量(互斥鎖)

當多個控制線程共享相同的記憶體時,需要確保每個執行緒看到一致的資料檢視。如果每個執行緒使用的變數都是其他執行緒不會讀取或修改的,那麼就不存在一致性問題。同樣地,如果變數是唯讀的,多個執行緒同時讀取該量也不會有一致性問題。但是,當某個執行緒可以修改變數,而其他執行緒也可以讀取或者修改這個變數的時候,就...