--- /dev/null
+#ifndef LOCK_GUARD_H
+#define LOCK_GUARD_H
+
+#include <memory>
+
+namespace isc {
+namespace util {
+namespace thread {
+
+template <typename Lock>
+class LockGuard {
+public:
+ LockGuard(Lock* lock) : lk_(lock) {
+ if (lk_) {
+ lk_->lock();
+ }
+ }
+
+ ~LockGuard() {
+ if (lk_) {
+ lk_->unlock();
+ }
+ }
+
+ LockGuard(const LockGuard&) = delete;
+ LockGuard& operator=(const LockGuard&) = delete;
+
+ LockGuard(LockGuard&&) = delete;
+ LockGuard& operator=(LockGuard&&) = delete;
+
+private:
+ Lock* lk_;
+};
+
+} // namespace thread
+} // namespace util
+} // namespace isc
+
+#endif // LOCK_GUARD_H