18 #if defined( _WIN32 ) && !defined( __SYMBIAN32__ )
36 class Mutex::MutexImpl
45 MutexImpl(
const MutexImpl& );
46 MutexImpl& operator=(
const MutexImpl& );
48 #if defined( _WIN32 ) && !defined( __SYMBIAN32__ )
49 CRITICAL_SECTION m_cs;
50 #elif defined( HAVE_PTHREAD )
51 pthread_mutex_t m_mutex;
56 Mutex::MutexImpl::MutexImpl()
58 #if defined( _WIN32 ) && !defined( __SYMBIAN32__ )
61 InitializeCriticalSection( &m_cs );
62 #elif defined( HAVE_PTHREAD )
65 pthread_mutexattr_t mutexAttribute;
66 pthread_mutexattr_init( &mutexAttribute );
67 pthread_mutexattr_settype( &mutexAttribute, PTHREAD_MUTEX_RECURSIVE );
68 pthread_mutex_init( &m_mutex, &mutexAttribute );
69 pthread_mutexattr_destroy( &mutexAttribute );
73 Mutex::MutexImpl::~MutexImpl()
75 #if defined( _WIN32 ) && !defined( __SYMBIAN32__ )
76 DeleteCriticalSection( &m_cs );
77 #elif defined( HAVE_PTHREAD )
78 pthread_mutex_destroy( &m_mutex );
84 #if defined( _WIN32 ) && !defined( __SYMBIAN32__ )
85 EnterCriticalSection( &m_cs );
86 #elif defined( HAVE_PTHREAD )
87 pthread_mutex_lock( &m_mutex );
93 #if defined( _WIN32 ) && !defined( __SYMBIAN32__ )
94 return TryEnterCriticalSection( &m_cs ) ?
true :
false;
95 #elif defined( HAVE_PTHREAD )
96 return !( pthread_mutex_trylock( &m_mutex ) );
104 #if defined( _WIN32 ) && !defined( __SYMBIAN32__ )
105 LeaveCriticalSection( &m_cs );
106 #elif defined( HAVE_PTHREAD )
107 pthread_mutex_unlock( &m_mutex );
112 : m_mutex( new MutexImpl() )
128 return m_mutex->trylock();