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;
};
参考文献: