Android Native 同步类
来源:互联网 发布:java 图片合成pdf 编辑:程序博客网 时间:2024/05/29 04:38
先来看互斥Mutex
class Mutex { enum { PRIVATE = 0, SHARED = 1}; Mutex(); Mutex(const char* name); Mutex(int type, const char* name = NULL); ~Mutex(); status_t lock(); void unlock(); status_t tryLock();}
再看Autolock
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;}
Condition类和java中的wait,notify功能类似,只是java封装在了object中了。
Condition在调wait的时候,必须在锁的中间。而且wait的时候和java一样也会将所持的锁释放。
class Condition {public: enum { PRIVATE = 0, SHARED = 1 }; Condition(); Condition(int type);//如果type是SHARED,表示支持跨进程的条件同步 ~Condition(); //线程B和C等待事件,wait这个名字是不是很形象呢? status_t wait(Mutex& mutex); //线程B和C的超时等待,B和C可以指定等待时间,当超过这个时间,条件却还不满足,则退出等待。 status_t waitRelative(Mutex& mutex, nsecs_t reltime); //触发者A用来通知条件已经满足,但是B和C只有一个会被唤醒。 void signal(); //触发者A用来通知条件已经满足,所有等待者都会被唤醒。 void broadcast();
下面看一个例子:
class Barrier{public: inline Barrier() : state(CLOSED) { }//state就是所谓的“条件” inline ~Barrier() { } void open() { Mutex::Autolock _l(lock); state = OPENED; cv.broadcast(); } void close() { Mutex::Autolock _l(lock); state = CLOSED; } void wait() const { Mutex::Autolock _l(lock);//临时对象_l,用lock来构造,在AutoLock的构造函数里已给lock加锁(调用lock()函数)——该wait()函数执行完毕,会自动释放lock(这个场景会使得其他线程再次修改state,产生不安全因素。不过由于Barrier的使用场景的特殊性,其用在线程初始化时,故OK。) while (state == CLOSED) {//while语句:不断轮询,直到state==OPENED cv.wait(lock); } }private: enum { OPENED, CLOSED }; mutable Mutex lock;//持有一个互斥锁 mutable Condition cv;//持有一个条件变量 volatileint state;//每次都从内存更新的“条件”};
1 0
- Android Native 同步类
- Android Native常见类
- android常用同步类
- Android多线程-------同步辅助类
- js同步访问native的方法
- React Native 与 夜神模拟器同步
- Android native development tool
- native programming on android
- Debug native for android
- Android native C开发
- Android Native Code调试
- Debug Android native code
- Android Native C Log
- Android Native 绘图方法
- android native property属性
- android native property属性
- android native property属性
- 制作android native service
- koa使用之中文分词与自动分类推荐的实现
- 关于java.lang.IllegalMonitorStateException
- iOS 集成银联支付(绕过文档的坑,快速集成)
- HDU 2571 命运
- JS获取request参数 和改变request参数
- Android Native 同步类
- MAVEN搭建SPRINGMVC+HIBERNATE遇到的问题及解决方案
- UIScrollView
- 几种常见容器比较和分析 hashmap, map, vector, list, hash table
- 自适应解决方案
- 机器学习中距离和相似性度量方法(比较全)
- Java+freemarker生成HTML模板页
- wifi伴侣如何打造wifi众联开放平台这座殿堂
- HTML之h1 h2 h3 h4标签知识经验篇