00001 #include "mutex.h"
00002
00003 namespace n2nc {
00004 namespace sync {
00005
00006 Mutex::Mutex(){
00007 ::pthread_mutex_init(&this->m_mutex,NULL);
00008 }
00009 Mutex::~Mutex(){
00010 this->unlock();
00011 }
00012
00013 bool Mutex::lock(){
00014 if (pthread_equal(this->m_lock_from,pthread_self())){
00015
00016 std::cerr << "deadlock detected, avoiding it:)" << std::endl ;
00017 return 0;
00018 }
00019 this->m_lock_from = pthread_self();
00020 return !::pthread_mutex_lock(&this->m_mutex);
00021 }
00022
00023 bool Mutex::trylock(){
00024 return !::pthread_mutex_trylock(&this->m_mutex);
00025 }
00026
00027 bool Mutex::unlock(){
00028 this->m_lock_from = 0;
00029 return !::pthread_mutex_unlock(&this->m_mutex);
00030 }
00031
00032 }
00033 }
00034