#pragma once #include namespace ylib { template class counter{ public: counter(const T& default_value = 0){m_value = default_value;} ~counter() {} T make(){ std::unique_lock guard(m_mutex); return ++m_value; } private: T m_value; std::mutex m_mutex; }; }