00001 // #include "moses/TranslationModel/UG/generic/threading/ug_thread_safe_counter.h" 00002 #include "ug_thread_safe_counter.h" 00003 // obsolete once <atomic> can be assumed to be available everywhere 00004 00005 namespace Moses 00006 { 00007 ThreadSafeCounter:: 00008 ThreadSafeCounter() 00009 : ctr(0) 00010 { } 00011 00012 size_t 00013 ThreadSafeCounter:: 00014 operator++() 00015 { 00016 boost::lock_guard<boost::mutex> guard(this->lock); 00017 return ++ctr; 00018 } 00019 00020 size_t 00021 ThreadSafeCounter:: 00022 operator++(int foo) 00023 { 00024 boost::lock_guard<boost::mutex> guard(this->lock); 00025 return ctr++; 00026 } 00027 00028 ThreadSafeCounter:: 00029 operator size_t() const 00030 { 00031 return ctr; 00032 } 00033 00034 size_t 00035 ThreadSafeCounter:: 00036 operator--() 00037 { 00038 boost::lock_guard<boost::mutex> guard(this->lock); 00039 return --ctr; 00040 } 00041 00042 size_t 00043 ThreadSafeCounter:: 00044 operator--(int foo) 00045 { 00046 boost::lock_guard<boost::mutex> guard(this->lock); 00047 return ctr--; 00048 } 00049 00050 00051 }