Mutex

    xiaoxiao2021-03-25  6

    inline Mutex::Mutex(int type, const char* name) {     if (type == SHARED) {        //type如果是SHARED,则表明这个Mutex支持跨进程的线程同步。       //以后我们在Audio系统和Surface系统中会经常见到这种用法。         pthread_mutexattr_t attr;         pthread_mutexattr_init(&attr);         pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED);         pthread_mutex_init(&mMutex, &attr);         pthread_mutexattr_destroy(&attr);     } else {         pthread_mutex_init(&mMutex, NULL);     } } inline Mutex::~Mutex() {     pthread_mutex_destroy(&mMutex); } inline status_t Mutex::lock() {     return -pthread_mutex_lock(&mMutex); } inline void Mutex::unlock() {     pthread_mutex_unlock(&mMutex); } inline status_t Mutex::tryLock() {     return -pthread_mutex_trylock(&mMutex); } AudioEffectShared.h中 effect_param_cblk_t() : lock(Mutex::SHARED), clientIndex(0), serverIndex(0) {} AutoLock类是定义在Mutex内部的一个类,AutoLock的用法很简单: 先定义一个Mutex,如 Mutex xlock 在使用xlock的地方,定义一个AutoLock,如 AutoLock autoLock(xlock)     class Autolock {     public:         //构造的时候调用lock。         inline Autolock(Mutex& mutex) : mLock(mutex)  { mLock.lock(); }         inline Autolock(Mutex* mutex) : mLock(*mutex) { mLock.lock(); }         //析构的时候调用unlock。         inline ~Autolock() { mLock.unlock(); }     private:         Mutex& mLock;     }; 现在的使用更简单: Mutex::Autolock _l(mLock);
    转载请注明原文地址: https://ju.6miu.com/read-149668.html

    最新回复(0)