00001 #ifndef ARTDAQ_CORE_UTILITIES_TRACELOCK
00002 #define ARTDAQ_CORE_UTILITIES_TRACELOCK_HH 1
00003
00004 #include <mutex>
00005 #include "tracemf.h"
00006
00010 template<typename MUTEX = std::mutex>
00011 class TraceLock
00012 {
00013 public:
00020 TraceLock(MUTEX& mutex, int level, std::string const& description)
00021 : lock_(mutex)
00022 , description_(description)
00023 , level_(level)
00024 {
00025 TLOG_ARB(level_, "TraceLock") << "Acquired Lock " << description_ << ", mutex=" << (void*)&mutex << ", lock=" << (void*)&lock_;
00026 }
00027
00031 virtual ~TraceLock()
00032 {
00033 TLOG_ARB(level_, "TraceLock") << "Releasing lock " << description_ << ", lock=" << (void*)&lock_;
00034 }
00035
00036 private:
00037 TraceLock(TraceLock const&) = delete;
00038 TraceLock(TraceLock&&) = delete;
00039 TraceLock& operator=(TraceLock const&) = delete;
00040 TraceLock& operator=(TraceLock&&) = delete;
00041
00042 std::unique_lock<MUTEX> lock_;
00043 std::string description_;
00044 int level_;
00045 };
00046
00047 #endif