// Donot know when and where to use ACE_Thread_Mutex, I always use ACE_Recursive_Thread_Mutex.
1. define
ACE_Recursive_Thread_Mutex mMutex;
ACE_Condition<ACE_Recursive_Thread_Mutex> * mCondition;
mCondition = new ACE_Condition<ACE_Recursive_Thread_Mutex>(mMutex);
2. Usage
2.1 read
mCondition->mutex().acquire_read();
// to do your codes.
mCondition->mutex().release();
2.2 write
mCondition->mutex().acquire_write();
// to do your codes.
mCondition->mutex().release();
2.3 signal
mCondition->broadcast();
//mCondition->signal();
2.4 wait
mStateCondition->wait();
//or
ACE_Time_Value ace_timeout(timeout);
ACE_Time_Value ace_absolute_time(ACE_OS::gettimeofday() + ace_timeout);
if (mStateCondition->wait(&ace_absolute_time) == -1)
{
// failed.
}
3. deconstuctor
if (mCondition != 0)
{
delete mCondition;
mCondition=0;
}
4. Simplified mode
ACE_Guard<ACE_Recursive_Thread_Mutex> guard(mMutex);