?? commonmutex.h
字號(hào):
#ifndef CCommonMutex_h
#define CCommonMutex_h 1
#include <semaphore.h>
#include "Header.h"
using namespace std;
/**
* CCommonMutex類實(shí)現(xiàn)了一個(gè)有更好使用特性的mutex。它除了與pthread_mutex_t的使用特性一致,
* 可以對(duì)資源的訪問進(jìn)行同步保護(hù)之外,還支持同一線程上下文對(duì)同一個(gè)mutex的可重入性。即當(dāng)一個(gè)
* 線程獲得了mutex以后,隨后對(duì)同一個(gè)mutex的進(jìn)入動(dòng)作將不會(huì)被掛起,但是線程調(diào)用了多少次lock
* 就需要調(diào)用多少次unlock才能最終釋放對(duì)mutex的擁有。
* 其中,對(duì)mutex的功能模擬使用了semaphore來實(shí)現(xiàn),以避免phread_mutex_t的不可重入,同時(shí)semaphore本身
* 是cancelation point,能夠被pthread_cancel調(diào)用釋放。
*/
class CCommonMutex
{
protected:
/**
* 定義了一個(gè)互斥鎖, 在這個(gè)類里面對(duì)其的上鎖和解鎖操作進(jìn)行封裝
*/
sem_t m_Semaphore;
private:
/**
* 同一線程上下文對(duì)本mutex的上鎖計(jì)數(shù)
*/
UINT m_nCount ;
/**
* 記錄獲得本mutex的線程的pid,用于區(qū)分同一線程上下文
*/
int m_nPid ;
public:
CCommonMutex();
virtual ~CCommonMutex();
/**
* 函數(shù)名稱: Lock
* 函數(shù)功能: 對(duì)一段代碼進(jìn)行上鎖操作,直到解鎖。如果當(dāng)鎖已經(jīng)被別的線程持有時(shí),
* 會(huì)在調(diào)用點(diǎn)掛起
* @param:
* @return:
* @see:
*/
void Lock();
/**
* 函數(shù)名稱: tryLock
* 函數(shù)功能: 與Lock()類似,但是當(dāng)鎖已經(jīng)被別的線程持有時(shí),tryLock不會(huì)掛起,而是
* 立刻返回FALSE,如果鎖當(dāng)前沒有被別的線程持有,則上鎖并返回TRUE
* @param:
* @return: TRUE表示上鎖成功,F(xiàn)ALSE上鎖失敗
* @see:
*/
bool tryLock();
/**
* 函數(shù)名稱: Unlock
* 函數(shù)功能: 對(duì)一段上鎖的代碼進(jìn)行解鎖操作
* @param:
* @return:
* @see:
*/
void Unlock();
};
#endif
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -