// Copyright 2013 Google Inc. All Rights Reserved. // // Lock - Platform independent interface for a Mutex class // #ifndef CDM_BASE_LOCK_H_ #define CDM_BASE_LOCK_H_ #include "wv_cdm_types.h" namespace wvcdm { // Simple lock class. The implementation is platform dependent. // // The lock must be unlocked by the thread that locked it. // The lock is also not recursive (ie. cannot be taken multiple times). class Lock { public: Lock(); ~Lock(); void Acquire(); void Release(); // Acquires a lock if not held and returns true. // Returns false if the lock is held by another thread. bool Try(); friend class AutoLock; private: class Impl; Impl *impl_; CORE_DISALLOW_COPY_AND_ASSIGN(Lock); }; // Manages the lock automatically. It will be locked when AutoLock // is constructed and release when AutoLock goes out of scope class AutoLock { public: explicit AutoLock(Lock& lock); explicit AutoLock(Lock* lock); ~AutoLock(); private: class Impl; Impl *impl_; CORE_DISALLOW_COPY_AND_ASSIGN(AutoLock); }; }; // namespace wvcdm #endif // CDM_BASE_LOCK_H_