00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef __BARRY_SCOPED_LOCK_H__
00023 #define __BARRY_SCOPED_LOCK_H__
00024
00025 #include <pthread.h>
00026
00027 namespace Barry {
00028
00029 class scoped_lock
00030 {
00031 pthread_mutex_t *m_mutex;
00032
00033 public:
00034 scoped_lock(pthread_mutex_t &mutex)
00035 : m_mutex(&mutex)
00036 {
00037 while( pthread_mutex_lock(m_mutex) != 0 )
00038 ;
00039 }
00040
00041 ~scoped_lock()
00042 {
00043 unlock();
00044 }
00045
00046 void unlock()
00047 {
00048 if( m_mutex ) {
00049 pthread_mutex_unlock(m_mutex);
00050 m_mutex = 0;
00051 }
00052 }
00053 };
00054
00055 }
00056
00057 #endif
00058