25 #define __MSXML_LIBRARY_DEFINED__
44 int errCode = pthread_mutex_lock(
pMtx_ );
47 stringstream errorMessage;
50 strerror_s( errBuffer,
sizeof( errBuffer ), errCode );
51 errorMessage <<
"Unable to lock mutex. Error code : " << errCode <<
" [" << errBuffer <<
"]";
53 errorMessage <<
"Unable to lock mutex. Error code : " << errCode <<
" [" << strerror( errCode ) <<
"]";
55 throw runtime_error( errorMessage.str() );
59 LockingPtr(
volatile T& obj,
volatile pthread_mutex_t& mtx ) :
pObj_( const_cast< T* >( &obj ) ),
60 pMtx_( const_cast< pthread_mutex_t* >( &mtx ) )
62 int errCode = pthread_mutex_lock(
pMtx_ );
65 stringstream errorMessage;
68 strerror_s( errBuffer,
sizeof( errBuffer ), errCode );
69 errorMessage <<
"Unable to lock mutex. Error code : " << errCode <<
" [" << errBuffer <<
"]";
71 errorMessage <<
"Unable to lock mutex. Error code : " << errCode <<
" [" << strerror( errCode ) <<
"]";
73 throw runtime_error( errorMessage.str() );
79 int errCode = pthread_mutex_unlock(
pMtx_ );
82 stringstream errorMessage;
85 strerror_s( errBuffer,
sizeof( errBuffer ), errCode );
86 errorMessage <<
"Unable to unlock mutex. Error code : " << errCode <<
" [" << errBuffer <<
"]";
88 errorMessage <<
"Unable to unlock mutex. Error code : " << errCode <<
" [" << strerror( errCode ) <<
"]";
90 throw runtime_error( errorMessage.str() );
112 #if defined( AIX ) && defined( DIE_HARD )
114 #elif defined( WIN32 ) //&& defined( DIE_HARD )
124 #if defined( AIX ) && defined( DIE_HARD )
125 register unsigned int zeroOffset = 0;
126 register unsigned int temp;
130 lwarx temp, zeroOffset, value
132 stwcx. temp, zeroOffset, value
136 #elif defined( WIN32 ) //&& defined( DIE_HARD )
137 return InterlockedIncrement( value );
145 #if defined( AIX ) && defined( DIE_HARD )
146 register unsigned int zeroOffset = 0;
147 register unsigned int temp;
152 lwarx temp, zeroOffset, value
154 stwcx. temp, zeroOffset, value
158 #elif defined( WIN32 ) //&& defined( DIE_HARD )
159 return InterlockedDecrement( value );
167 #endif // LOCKINGPTR_H