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;
};
參考文獻: