Android中線程同步之MUTEX與Condtion的實現

來源:互聯網
上載者:User
田海立
2013-08-10

Android封裝的同步類主要有MUTEX(AutoMutex)與Condition。前文分析了它們的外部使用,本文看它們是如何通過對pthread Mutex和Condition的封裝實現的。遇到pthread的用法,可結合《pthread之MUTEX與Condition用法》一起看。
Keywords: Mutex, Condition Variable, AutoLock/AutoMutex, Android
關鍵字:互斥體、條件變數、自動鎖/自動互斥體、Android

一、MUTEX的實現

MUTEX的實現是在frameworks/native/include/utils/Mutex.h中。

Mutex的實現利用了pthread Mutex的實現。

首先,Class Mutex內部定義一個pthread_mutex

    pthread_mutex_t mMutex;

然後,分別封裝了pthread_mutex_xxx()而已:

inline Mutex::Mutex() {    pthread_mutex_init(&mMutex, NULL);}inline Mutex::Mutex(const char* name) {    pthread_mutex_init(&mMutex, NULL);}inline Mutex::Mutex(int type, const char* name) {    if (type == SHARED) {        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);}

具體pthread Mutex的用法,參見《pthread之MUTEX與Condition用法》

二、Autolock/AutoMutex的實現

Autolock/AutoMutex的實現同樣是在frameworks/native/include/utils/Mutex.h中。

namespace android {class Mutex {    //...    class Autolock {    public:        inline Autolock(Mutex& mutex) : mLock(mutex)  { mLock.lock(); }        inline Autolock(Mutex* mutex) : mLock(*mutex) { mLock.lock(); }        inline ~Autolock() { mLock.unlock(); }    private:        Mutex& mLock;    };}; // end of class Mutextypedef Mutex::Autolock AutoMutex;}; // namespace android

三、Condition的實現

Condition的實現是在frameworks/native/include/utils/Condition.h中

Condition的實現利用了pthread Condition的實現。

首先,Class Condition內定義一個pthread_cond

    pthread_cond_t mCond;

然後,分別封裝了pthread_cond_xxx()而已:

inline Condition::Condition() {    pthread_cond_init(&mCond, NULL);}inline Condition::Condition(int type) {    if (type == SHARED) {        pthread_condattr_t attr;        pthread_condattr_init(&attr);        pthread_condattr_setpshared(&attr, PTHREAD_PROCESS_SHARED);        pthread_cond_init(&mCond, &attr);        pthread_condattr_destroy(&attr);    } else {        pthread_cond_init(&mCond, NULL);    }}inline Condition::~Condition() {    pthread_cond_destroy(&mCond);}inline status_t Condition::wait(Mutex& mutex) {    return -pthread_cond_wait(&mCond, &mutex.mMutex);}inline void Condition::signal() {    pthread_cond_signal(&mCond);}inline void Condition::broadcast() {    pthread_cond_broadcast(&mCond);}

具體pthread Condition的用法,參見《pthread之MUTEX與Condition用法》

四、總結

本文簡要介紹了Android中常用的同步機制Mutex(AutoMutex)、Condition的內部實現,也就是對pthread Mutex和Condition的簡單封裝。《pthread之MUTEX與Condition用法》中介紹pthread中Mutex與Condition的用法。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.