Android的同步和消息
文章平均质量分 73
行者无疆-超越
这个作者很懒,什么都没留下…
展开
-
Android中的编译屏障和内存屏障
现代 CPU中指令的执行次序并不一定严格按顺序执行的,没有相关性的指令可以打乱次序执行,以充分利用CPU的指令流水线,提高执行速度。另外,编译器也会对指令进行优化,例如:调整指令顺序来利用CPU的指令流水线。这些优化方式,绝大部分情况工作的很好,但是在一些比较复杂的情况可能出问题,例如执行同步代码时就有可能因为这种优化导致同步原语之后的指令在同步原语前执行。内存屏障和编译屏障就是用来告诉CPU和原创 2014-04-30 15:46:14 · 2198 阅读 · 0 评论 -
Futex用户态操作
Futex的系统调用FUTEX_WAIT和FUTEX_WAKE只是用来挂起或者唤醒进程,Futex的同步机制还包括用户态下的判断操作。用户态下的操作没有固定的函数调用,只是一种检测共享变量的方法。下面将介绍如何将Futex用于临界区。首先需要创建一个整型计数器作为Futex变量,如果是进程间同步,这个变量必须位于共享内存。Futex变量的初始值为0。当进程或线程尝试持有锁的时候,检原创 2014-04-30 15:46:35 · 1587 阅读 · 0 评论 -
Futex同步机制简介
Futex是fast userspacemutex的缩写,意思是快速用户空间互斥体。它由HubertusFranke,MatthewKirkwood,IngoMolnar和RustyRussell设计并维护。我们这里讨论Futex是因为在Android中不但线程函数中使用到了Futex,甚至一些模块中在直接使用Futex作为进程间同步的手段,了解Futex的原理将有助于我们更深入的理解这原创 2014-04-30 15:46:31 · 2405 阅读 · 0 评论 -
Mutex类使用Futex实现同步
下面我们将通过一个实际的例子来进一步的了解Futex的用法。前面我们介绍Bionic中的线程管理时介绍了pthread的临界区函数。临界区的实现中最重要的是上锁和解锁函数,下面我们看看它们的实现:1. 在Bionic的实现中,pthread_mutex_lock()调用了内部函数_normal_lock()来实现上锁功能,代码如下:static__inline__ voi原创 2014-04-30 15:46:37 · 3201 阅读 · 0 评论 -
Android的Futex系统调用
在Linux中,Futex系统调用的定义如下#define __NR_futex 2401. Futex系统调用的用法为:int futex (int *uaddr, int op,int val, const struct timespec *timeout,int *uaddr2, int val3);uaddr是Futex变量,一个共享的原创 2014-04-30 15:46:33 · 4189 阅读 · 0 评论