jthread庫分析一:JMutex類和JMutexAutoLock類

JThread庫是一套開源C++線程庫,提供了一些易於在不同平臺上使用的線程類。這些線程類只是對於不同平臺線程實現的基本包裝。 

本文對JThread線程類行分析,分析的版本是jthread-1.3.1

JThread庫包括JThread類,JMutex類和JMutexAutoLock類。所有返回類型爲int的函數返回大於等於0的值表示成功;返回負值表示出錯。

P.S. JThread庫使用CMake庫進行編譯, jthread-1.3.1需要的CMake版本應大於2.6。至於具體如何編譯,參考【流媒體】jrtplib—VS2010下RTP開源協議庫JRTPLIB3.9.1編譯

JMutex類

1, 在使用JMutex類之前必須調用Init方法。之後,可以通過Lock和Unlock方法來加鎖和解鎖。

2, IsInitialized用於檢測JMutex實例是否已經調用Init方法。

具體定義如下:

class JMutex
{
public:
	JMutex();
	~JMutex();
	int Init();
	int Lock();
	int Unlock();
	bool IsInitialized();
};	
2.1 Linux下通過pthread_mutex實現, 這些函數的具體用法參考《Unix環境高級編程》。pthread_mutex系統函數包括有:
#include <pthread.h>
#include <time.h>

pthread_mutex_t fastmutex = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t recmutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER;
pthread_mutex_t errchkmutex = PTHREAD_ERRORCHECK_MUTEX_INITIALIZER;
pthread_mutex_t recmutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
pthread_mutex_t errchkmutex = PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP;

int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr);
int pthread_mutex_lock(pthread_mutex_t *mutex);
int pthread_mutex_trylock(pthread_mutex_t *mutex);
int pthread_mutex_timedlock(pthread_mutex_t *mutex, const struct timespec *abs_timeout);
int pthread_mutex_unlock(pthread_mutex_t *mutex);
int pthread_mutex_destroy(pthread_mutex_t *mutex);

2.2 Windows下有兩種不同的實現,一種是關鍵段, 一種是Mutex系統方法。它們的區別與聯繫這裏不再重複,

《Windows核心編程》描述的很詳細,這裏列出網絡上的一個表格:



JMutexAutoLock類

此類的實現很簡單,主要利用了類對象在生命週期結束時自動調用析構函數的原理。

class JMutexAutoLock
{
public:
	JMutexAutoLock(JMutex &m) : mutex(m)						{ mutex.Lock(); }
	~JMutexAutoLock()								{ mutex.Unlock(); }
private:
	JMutex &mutex;
};


參考文獻:

1, Jori's page, JThread

2, Mutex和Critical section的異同


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章