Mutex.h

00001 /*****************************************************************************
00002  * Author:   Vadim Zeitlin <vadim@wxwidgets.org>
00003  *
00004  *****************************************************************************
00005  * Copyright (c) 2004 Vadim Zeitlin
00006  *
00007  * This library is free software; you can distribute it and/or modify it under
00008  * the terms of the GNU Lesser General Public License (LGPL), as published by
00009  * the Free Software Foundation; either version 2.1 of the License, or (at your
00010  * option) any later version.
00011  *
00012  * This library is distributed in the hope that it will be useful, but WITHOUT
00013  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
00014  * FITNESS FOR A PARTICULAR PURPOSE.  See the LGPL in the file COPYING for more
00015  * details.
00016  *
00017  */
00018 
00019 #ifndef _Mutex_incl_
00020 #define _Mutex_incl_
00021 
00022 #include <rlog/common.h>
00023 
00024 #ifdef _WIN32
00025     #include <windows.h>
00026     // conflict with our own ERROR...
00027     #undef ERROR
00028 
00029     typedef CRITICAL_SECTION rlog_mutex_t;
00030     #define rlog_mutex_init InitializeCriticalSection
00031     #define rlog_mutex_destroy DeleteCriticalSection
00032     #define rlog_mutex_lock EnterCriticalSection
00033     #define rlog_mutex_unlock LeaveCriticalSection
00034 #else
00035     #include <pthread.h>
00036 
00037     typedef pthread_mutex_t rlog_mutex_t;
00038     #define rlog_mutex_init(m) pthread_mutex_init((m), 0)
00039     #define rlog_mutex_destroy pthread_mutex_destroy
00040     #define rlog_mutex_lock pthread_mutex_lock
00041     #define rlog_mutex_unlock pthread_mutex_unlock
00042 #endif
00043 
00044 namespace rlog
00045 {
00053     class RLOG_DECL Mutex
00054     {
00055     public:
00056         Mutex() { rlog_mutex_init(&m_mutex); }
00057         ~Mutex() { rlog_mutex_destroy(&m_mutex); }
00058 
00059         void Lock() { rlog_mutex_lock(&m_mutex); }
00060         void Unlock() { rlog_mutex_unlock(&m_mutex); }
00061 
00062     private:
00063         rlog_mutex_t m_mutex;
00064 
00065         Mutex( const Mutex & );
00066         Mutex & operator = ( const Mutex & );
00067     };
00068 } // namespace rlog
00069 
00070 #endif // _Mutex_incl_
00071 

Generated on Mon Nov 20 22:57:44 2006 for rlog by  doxygen 1.5.0