00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef PALUDIS_GUARD_PALUDIS_UTIL_MUTEX_HH
00021 #define PALUDIS_GUARD_PALUDIS_UTIL_MUTEX_HH 1
00022
00023 #include <paludis/util/mutex-fwd.hh>
00024 #include <paludis/util/attributes.hh>
00025 #include <pthread.h>
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 namespace paludis
00038 {
00039
00040
00041
00042
00043
00044
00045 class PALUDIS_VISIBLE Mutex
00046 {
00047 private:
00048 Mutex(const Mutex &);
00049 Mutex & operator= (const Mutex &);
00050
00051 pthread_mutex_t _mutex;
00052
00053 public:
00054
00055
00056
00057 explicit Mutex();
00058 ~Mutex();
00059
00060
00061
00062 pthread_mutex_t * posix_mutex() PALUDIS_ATTRIBUTE((warn_unused_result));
00063 };
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074 class PALUDIS_VISIBLE Lock
00075 {
00076 private:
00077 Lock(const Lock &);
00078 Lock & operator= (const Lock &);
00079
00080 Mutex * _mutex;
00081
00082 public:
00083
00084
00085
00086 explicit Lock(Mutex &);
00087 ~Lock();
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097 void acquire_then_release_old(Mutex &);
00098 };
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109 class PALUDIS_VISIBLE TryLock
00110 {
00111 private:
00112 TryLock(const TryLock &);
00113 TryLock & operator= (const TryLock &);
00114
00115 Mutex * _mutex;
00116
00117 public:
00118
00119
00120
00121 explicit TryLock(Mutex &);
00122 ~TryLock();
00123
00124
00125
00126
00127
00128
00129 bool operator() () const PALUDIS_ATTRIBUTE((warn_unused_result));
00130 };
00131 }
00132
00133 #endif