IBR-DTNSuite
0.8
|
00001 /* 00002 * AtomicCounter.h 00003 * 00004 * Created on: 12.02.2010 00005 * Author: morgenro 00006 */ 00007 00008 #ifndef ATOMICCOUNTER_H_ 00009 #define ATOMICCOUNTER_H_ 00010 00011 #include "ibrcommon/thread/Conditional.h" 00012 00013 namespace ibrcommon 00014 { 00015 class AtomicCounter { 00016 public: 00017 AtomicCounter(int init = 0); 00018 virtual ~AtomicCounter(); 00019 00020 int value(); 00021 void wait(int until = 0); 00022 00023 void unblockAll(); 00024 00025 AtomicCounter& operator++(); 00026 AtomicCounter operator++(int); 00027 00028 AtomicCounter& operator--(); 00029 AtomicCounter operator--(int); 00030 00031 class Lock 00032 { 00033 public: 00034 Lock(AtomicCounter &counter); 00035 virtual ~Lock(); 00036 00037 private: 00038 AtomicCounter &_counter; 00039 }; 00040 00041 private: 00042 ibrcommon::Conditional _lock; 00043 int _value; 00044 bool _unblock; 00045 00046 }; 00047 } 00048 00049 00050 #endif /* ATOMICCOUNTER_H_ */