git / moonbite-core / src/leveldb/util/mutexlock.h · raw

// Copyright (c) 2011 The LevelDB Authors. All rights reserved.// Use of this source code is governed by a BSD-style license that can be// found in the LICENSE file. See the AUTHORS file for names of contributors.#ifndef STORAGE_LEVELDB_UTIL_MUTEXLOCK_H_#define STORAGE_LEVELDB_UTIL_MUTEXLOCK_H_#include "port/port.h"#include "port/thread_annotations.h"namespace leveldb {// Helper class that locks a mutex on construction and unlocks the mutex when// the destructor of the MutexLock object is invoked.//// Typical usage:////   void MyClass::MyMethod() {//     MutexLock l(&mu_);       // mu_ is an instance variable//     ... some complex code, possibly with multiple return paths ...//   }class SCOPED_LOCKABLE MutexLock { public:  explicit MutexLock(port::Mutex* mu) EXCLUSIVE_LOCK_FUNCTION(mu) : mu_(mu) {    this->mu_->Lock();  }  ~MutexLock() UNLOCK_FUNCTION() { this->mu_->Unlock(); }  MutexLock(const MutexLock&) = delete;  MutexLock& operator=(const MutexLock&) = delete; private:  port::Mutex* const mu_;};}  // namespace leveldb#endif  // STORAGE_LEVELDB_UTIL_MUTEXLOCK_H_