AutoMutex简单使用

android bp中添加: shared_libs: [ “libbinder” ] 头引用: #include 声明: mutable Mutex mLo

android bp中添加:

shared_libs: [ “libbinder” ]

头引用:

#include

声明:

mutable Mutex mLock;

使用:

{
AutoMutex _l(mLock);
}

/** NOTE: This class is for code that builds on Win32.  Its usage is* deprecated for code which doesn't build for Win32.  New code which* doesn't build for Win32 should use std::mutex and std::lock_guard instead.** Simple mutex class.  The implementation is system-dependent.** The mutex must be unlocked by the thread that locked it.  They are not* recursive, i.e. the same thread can't lock it multiple times.*/
class CAPABILITY("mutex") Mutex {public:enum {PRIVATE = 0,SHARED = 1};Mutex();explicit Mutex(const char* name);explicit Mutex(int type, const char* name = nullptr);~Mutex();// lock or unlock the mutexstatus_t lock() ACQUIRE();void unlock() RELEASE();// lock if possible; returns 0 on success, error otherwisestatus_t tryLock() TRY_ACQUIRE(0);#if defined(__ANDROID__)// Lock the mutex, but don't wait longer than timeoutNs (relative time).// Returns 0 on success, TIMED_OUT for failure due to timeout expiration.//// OSX doesn't have pthread_mutex_timedlock() or equivalent. To keep// capabilities consistent across host OSes, this method is only available// when building Android binaries.//// FIXME?: pthread_mutex_timedlock is based on CLOCK_REALTIME,// which is subject to NTP adjustments, and includes time during suspend,// so a timeout may occur even though no processes could run.// Not holding a partial wakelock may lead to a system suspend.status_t timedLock(nsecs_t timeoutNs) TRY_ACQUIRE(0);
#endif// Manages the mutex automatically. It'll be locked when Autolock is// constructed and released when Autolock goes out of scope.class SCOPED_CAPABILITY Autolock {public:inline explicit Autolock(Mutex& mutex) ACQUIRE(mutex) : mLock(mutex) { mLock.lock(); }inline explicit Autolock(Mutex* mutex) ACQUIRE(mutex) : mLock(*mutex) { mLock.lock(); }inline ~Autolock() RELEASE() { mLock.unlock(); }private:Mutex& mLock;// Cannot be copied or moved - declarations onlyAutolock(const Autolock&);Autolock& operator=(const Autolock&);};private:friend class Condition;// A mutex cannot be copiedMutex(const Mutex&);Mutex& operator=(const Mutex&);#if !defined(_WIN32)pthread_mutex_t mMutex;
#elsevoid _init();void* mState;
#endif
};