Android同步类:Mutex和Condition的使用方式
来源:互联网 发布:java将文字转换成语音 编辑:程序博客网 时间:2024/05/17 01:14
Metux类
Mutex是互斥类,多个线程访问同一个资源时,要确保他们的互斥。主要函数有 lock(),unlock(),trylock()
以下是Mutex的源码
inline Mutex::Mutex(int type, const char* name) { if (type == SHARED) { //type如果是SHARED,则表明这个Mutex支持跨进程的线程同步。 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);}
AutoLock类
AutoLock类是Mutex的一个内部类,是为了方便使用Mutex而产生的。
在Mutex中,lock和unlock是必须成对出现的,但是当代码很复杂时,则会出现遗漏的现象。
利用构造和析构函数的性质,可以方便地让lock和unlock成对出现。
当需要使用lock函数时,构造一个AutoLock类,线程结束后该类析构,则相当于unlock,这样避免了发生lock和unlock不匹配的情况。
以下是Autolock的源码
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; };
Condition类
线程B或者C在运行前,必须有一个A线程的初始化,即A是一个条件,Condition则是用在这样的一种场景中,并且Condition和Mutex是配合使用的,Condition的函数都必须放在Mutex的lock和unlock之间。
以下是Condition的源码
class Condition {public: enum { PRIVATE = 0, SHARED = 1 }; Condition(); Condition(int type);//如果type是SHARED,表示支持跨进程的条件同步 ~Condition(); status_t wait(Mutex& mutex); status_t waitRelative(Mutex& mutex, nsecs_t reltime); void signal(); void broadcast();private:#if defined(HAVE_PTHREADS) pthread_cond_t mCond;#else void* mState;#endif}
0 0
- Android同步类:Mutex和Condition的使用方式
- Android同步类:Mutex和Condition
- Android同步类:Mutex和Condition
- Android同步类:Mutex和Condition
- Android同步类:Mutex和Condition
- Android同步类:Mutex和Condition
- mutex和 condition 的同步机制
- 线程同步:Mutex和Condition
- 线程同步的方式——Mutex(互斥量)、 Condition variable(条件变量)和Semaphore(信号量)
- Android中同步类Mutex(AutoMutex)与Condition。
- mutex和condition的用法
- mutex、condition与pthread_cond_wait()函数的使用
- qnx的mutex和condition学习
- android mutex and condition
- Java ReentranLock同步锁和Condition条件的使用
- mutex 和 condition variable[转载]
- 线程同步: mutex, semaphore, condition(ZT)[转载]
- C#中使用Monitor类、Lock和Mutex类来同步多线程的执行
- 经验总结 2016年安徽省程序设计竞赛总结
- hdu 1839(二分+最短路)
- 可重入锁(ReentrantLock)
- Bootstrap 响应式实用工具——visible-xs、visible-sm、hidden-xs、hidden-sm等
- ORL Face Database 人脸识别数据集
- Android同步类:Mutex和Condition的使用方式
- Servlet的运行过程
- CentOS6网卡静态IP设置
- 2016.5.21初中部模拟赛总结
- javascript垃圾回收
- 提高自行车踏频的训练技巧
- 代理模式
- IDA 调试android 遇到的问题及解决方案
- Ubuntu 下安装 JDK 并配置 Java 编译环境