3.2. Portable Mutex

Start cpp section to pthread/pthread_mutex.hpp[1 /1 ]
     1: #line 786 "./lpsrc/flx_pthread.pak"
     2: #ifndef __FLX_PTHREAD_MUTEX_H__
     3: #define __FLX_PTHREAD_MUTEX_H__
     4: #include "flx_pthread_config.hpp"
     5: 
     6: #include "pthread_win_posix_condv_emul.hpp"
     7: 
     8: namespace flx { namespace pthread {
     9: 
    10: // ********************************************************
    11: /// Mutex.
    12: // ********************************************************
    13: class PTHREAD_EXTERN flx_mutex_t {
    14:   flx_mutex_t(flx_mutex_t const&); // uncopyable
    15:   void operator=(flx_mutex_t const&); // uncopyable
    16: public:
    17:   pthread_mutex_t m;        // be nice, don't touch
    18:   flx_mutex_t();
    19:   ~flx_mutex_t();
    20:   void lock();
    21:   void unlock();
    22: };
    23: 
    24: class PTHREAD_EXTERN flx_mutex_locker_t {
    25:   flx_mutex_t* p;
    26:   flx_mutex_locker_t(flx_mutex_locker_t const&); // uncopyable
    27:   void operator=(flx_mutex_locker_t const&); // uncopyable
    28: public:
    29:   flx_mutex_locker_t(flx_mutex_t& pm);
    30:   ~flx_mutex_locker_t();
    31: };
    32: 
    33: }} // namespace pthread, flx
    34: #endif
    35: 
End cpp section to pthread/pthread_mutex.hpp[1]
Start cpp section to pthread/pthread_mutex.cpp[1 /1 ]
     1: #line 822 "./lpsrc/flx_pthread.pak"
     2: #include "pthread_mutex.hpp"
     3: #include <stdio.h>
     4: #include <assert.h>
     5: 
     6: namespace flx { namespace pthread {
     7: flx_mutex_t::flx_mutex_t(flx_mutex_t const&){} // uncopyable
     8: void flx_mutex_t::operator=(flx_mutex_t const&){} // uncopyable
     9: 
    10: flx_mutex_t::flx_mutex_t() { pthread_mutex_init(&m, NULL); }
    11: 
    12: flx_mutex_t::~flx_mutex_t() { pthread_mutex_destroy(&m); }
    13: void flx_mutex_t::lock() { pthread_mutex_lock(&m); }
    14: void flx_mutex_t::unlock() { pthread_mutex_unlock(&m);}
    15: 
    16: flx_mutex_locker_t::flx_mutex_locker_t(flx_mutex_locker_t const&){} // uncopyable
    17: void flx_mutex_locker_t::operator=(flx_mutex_locker_t const&){} // uncopyable
    18: flx_mutex_locker_t::flx_mutex_locker_t(flx_mutex_t& pm) : p(&pm) { p->lock(); }
    19: flx_mutex_locker_t::~flx_mutex_locker_t() { p->unlock(); }
    20: 
    21: }}
    22: 
End cpp section to pthread/pthread_mutex.cpp[1]