00001 #line 882 "./lpsrc/flx_pthread.pak"
00002 #ifndef __PTHREAD_COUNTER__
00003 #define __PTHREAD_COUNTER__
00004 #include <flx_pthread_config.hpp>
00005 #include "pthread_mutex.hpp"
00006 #include "pthread_condv.hpp"
00007
00008 namespace flx { namespace pthread {
00009
00010
00011
00012
00013 class PTHREAD_EXTERN flx_ts_counter_t {
00014 flx_mutex_t m;
00015 flx_condv_t c;
00016 long x;
00017 void operator=(flx_ts_counter_t const &);
00018 flx_ts_counter_t(flx_ts_counter_t const &);
00019 public:
00020 flx_ts_counter_t();
00021 ~flx_ts_counter_t();
00022 long pre_incr();
00023 long pre_decr();
00024 long post_incr();
00025 long post_decr();
00026
00027 long get();
00028 long set(long);
00029 long swap(long);
00030 long decr_pos();
00031 void wait_zero();
00032 long operator++() { return pre_incr(); }
00033 long operator--() { return pre_decr(); }
00034 long operator++(int) { return post_incr(); }
00035 long operator--(int) { return post_decr(); }
00036 long operator*() { return get(); }
00037 long operator=(long a) { return set(a); }
00038 };
00039 }}
00040
00041 #endif
00042