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_