本節在上一節的基礎上,利用區域性變數的構造和析構函式的特性,封裝了對臨界區的加鎖和解鎖操作,保證了程式(執行緒)在異常終止或中途退出的情況下也能正確解鎖,從而不會出現死鎖。
增加的臨界區類"clcriticalsection",其它源**同上一節。
標頭檔案:
view code
#ifndef clcriticalsection_h實現:#define clcriticalsection_h
class clmutex;
class clcriticalsection
;#endif
view code
#include "注意,該類僅負責對互斥量的加鎖(加鎖時附帶了對互斥量的有效性檢測)和解鎖操作(實際還是呼叫clmutext的操作),而鎖的建立和銷毀仍由clmutex類完成(由構造和析構函式完成)。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()
}}
測試: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執行緒同步(一)之使用互斥量(互斥鎖)
當多個控制線程共享相同的記憶體時,需要確保每個執行緒看到一致的資料檢視。如果每個執行緒使用的變數都是其他執行緒不會讀取或修改的,那麼就不存在一致性問題。同樣地,如果變數是唯讀的,多個執行緒同時讀取該量也不會有一致性問題。但是,當某個執行緒可以修改變數,而其他執行緒也可以讀取或者修改這個變數的時候,就...