parent
5bee45756d
commit
c141568b13
@ -1,26 +1,60 @@
|
|||||||
#include "Mutex.hpp"
|
#include "Mutex.hpp"
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
Mutex::Mutex()
|
|
||||||
|
Mutex::Mutex(int type)
|
||||||
{
|
{
|
||||||
pthread_mutex_init( &m_mutex, 0 );
|
int ret;
|
||||||
|
if ( type == PTHREAD_MUTEX_DEFAULT ) {
|
||||||
|
ret = pthread_mutex_init( &m_mutex, 0 );
|
||||||
|
} else {
|
||||||
|
pthread_mutexattr_t attr;
|
||||||
|
pthread_mutexattr_init(&attr);
|
||||||
|
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_ERRORCHECK);
|
||||||
|
ret = pthread_mutex_init( &m_mutex, &attr );
|
||||||
|
}
|
||||||
|
assert( ret == 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Mutex::~Mutex()
|
Mutex::~Mutex()
|
||||||
{
|
{
|
||||||
pthread_mutex_destroy ( &m_mutex );
|
int ret = pthread_mutex_destroy ( &m_mutex );
|
||||||
|
assert( ret == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Mutex::lock()
|
void Mutex::lock()
|
||||||
{
|
{
|
||||||
pthread_mutex_lock( &m_mutex );
|
int ret = pthread_mutex_lock( &m_mutex );
|
||||||
|
assert( ret == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Mutex::unlock()
|
void Mutex::unlock()
|
||||||
{
|
{
|
||||||
pthread_mutex_unlock ( &m_mutex );
|
int ret = pthread_mutex_unlock ( &m_mutex );
|
||||||
|
assert( ret == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool Mutex::tryLock(int interval)
|
||||||
|
{
|
||||||
|
if ( interval == 0 ) {
|
||||||
|
int result = pthread_mutex_trylock ( &m_mutex );
|
||||||
|
return result == 0;
|
||||||
|
} else {
|
||||||
|
timespec abs_time;
|
||||||
|
clock_gettime ( CLOCK_REALTIME, &abs_time );
|
||||||
|
abs_time.tv_nsec += interval * 1000000;
|
||||||
|
if ( abs_time.tv_nsec >= 1000000000 ) {
|
||||||
|
abs_time.tv_nsec -= 1000000000;
|
||||||
|
abs_time.tv_sec += 1;
|
||||||
|
}
|
||||||
|
int result = pthread_mutex_timedlock ( &m_mutex, &abs_time );
|
||||||
|
return result == 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in new issue