github.com/cellofellow/gopkg@v0.0.0-20140722061823-eec0544a62ad/database/leveldb/include/util/mutexlock.h (about)

     1  // Copyright (c) 2011 The LevelDB Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style license that can be
     3  // found in the LICENSE file. See the AUTHORS file for names of contributors.
     4  
     5  #ifndef STORAGE_LEVELDB_UTIL_MUTEXLOCK_H_
     6  #define STORAGE_LEVELDB_UTIL_MUTEXLOCK_H_
     7  
     8  #include "port/port.h"
     9  #include "port/thread_annotations.h"
    10  
    11  namespace leveldb {
    12  
    13  // Helper class that locks a mutex on construction and unlocks the mutex when
    14  // the destructor of the MutexLock object is invoked.
    15  //
    16  // Typical usage:
    17  //
    18  //   void MyClass::MyMethod() {
    19  //     MutexLock l(&mu_);       // mu_ is an instance variable
    20  //     ... some complex code, possibly with multiple return paths ...
    21  //   }
    22  
    23  class SCOPED_LOCKABLE MutexLock {
    24   public:
    25    explicit MutexLock(port::Mutex *mu) EXCLUSIVE_LOCK_FUNCTION(mu)
    26        : mu_(mu)  {
    27      this->mu_->Lock();
    28    }
    29    ~MutexLock() UNLOCK_FUNCTION() { this->mu_->Unlock(); }
    30  
    31   private:
    32    port::Mutex *const mu_;
    33    // No copying allowed
    34    MutexLock(const MutexLock&);
    35    void operator=(const MutexLock&);
    36  };
    37  
    38  }  // namespace leveldb
    39  
    40  
    41  #endif  // STORAGE_LEVELDB_UTIL_MUTEXLOCK_H_