Android怎么实现线程同步,Android中线程同步之MUTEX与Condtion的实现

田海立

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 Mutex

typedef 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的用法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值