00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef __ODBCXX_THREADS_H
00023 #define __ODBCXX_THREADS_H
00024
00025 #include <odbc++/setup.h>
00026
00027 #if defined(ODBCXX_ENABLE_THREADS)
00028
00029 #if !defined(WIN32)
00030 # include <pthread.h>
00031 #endif
00032
00033 namespace odbc {
00034
00035 class ODBCXX_EXPORT Mutex {
00036 private:
00037 #if !defined(WIN32)
00038 pthread_mutex_t mutex_;
00039 #else
00040 CRITICAL_SECTION mutex_;
00041 #endif
00042
00043 Mutex(const Mutex&);
00044 Mutex& operator=(const Mutex&);
00045
00046 public:
00047 explicit Mutex();
00048 ~Mutex();
00049
00050 void lock();
00051 void unlock();
00052 };
00053
00054 class ODBCXX_EXPORT Locker {
00055 private:
00056 Mutex& m_;
00057 public:
00058 Locker(Mutex& m)
00059 :m_(m) {
00060 m_.lock();
00061 }
00062
00063 ~Locker() {
00064 m_.unlock();
00065 }
00066 };
00067
00068 };
00069
00070
00071 #define ODBCXX_LOCKER(mut) odbc::Locker _locker(mut)
00072
00073 #else // !ODBCXX_ENABLE_THREADS
00074
00075 #define ODBCXX_LOCKER(mut) ((void)0)
00076
00077 #endif
00078
00079 #endif // __ODBCXX_THREADS_H