// PThreadMutex_t.cxx #include "dataset_util/PThreadMutex.h" #include #include using std::string; using std::cout; using std::endl; void msg(string txt) { cout << "*** "; cout << txt; cout << " ***" << endl; } int PThreadMutex_t() { msg("Create mutex"); PThreadMutex mut; cout << mut << endl; assert( mut.is_valid() ); assert( mut.is_unlocked() ); msg("Lock."); assert( mut.lock() == 0 ); cout << mut << endl; assert( mut.is_valid() ); assert( mut.is_locked() ); msg("Unlock."); assert( mut.unlock() == 0 ); cout << mut << endl; assert( mut.is_valid() ); assert( mut.is_unlocked() ); msg("Unlock again."); assert( mut.unlock() != 0 ); cout << mut << endl; assert( mut.is_valid() ); assert( mut.is_unlocked() ); msg("Lock twice."); assert( mut.lock_count() == 0 ); assert( mut.lock() == 0 ); cout << mut << endl; assert( mut.lock_count() == 1 ); assert( mut.lock() == 0 ); cout << mut << endl; assert( mut.lock_count() == 2 ); assert( mut.is_valid() ); assert( mut.is_locked() ); msg("Unlock twice."); assert( mut.lock_count() == 2 ); assert( mut.unlock() == 0 ); assert( mut.lock_count() == 1 ); assert( mut.unlock() == 0 ); assert( mut.lock_count() == 0 ); assert( mut.is_valid() ); assert( mut.is_unlocked() ); return 0; } #ifdef CTEST_MAIN int main() { return PThreadMutex_t(); } #endif