#pragma once #include #include #include namespace DB { class ProfilingScopedWriteRWLock { public: ProfilingScopedWriteRWLock(std::shared_mutex & rwl, ProfileEvents::Event event) : watch(), scoped_write_lock(rwl) { ProfileEvents::increment(event, watch.elapsed()); } private: Stopwatch watch; std::unique_lock scoped_write_lock; }; class ProfilingScopedReadRWLock { public: ProfilingScopedReadRWLock(std::shared_mutex & rwl, ProfileEvents::Event event) : watch(), scoped_read_lock(rwl) { ProfileEvents::increment(event, watch.elapsed()); } private: Stopwatch watch; std::shared_lock scoped_read_lock; }; }