Android的Futex系统调用
来源:互联网 发布:java工程师培训有用吗 编辑:程序博客网 时间:2024/06/07 08:36
新书上市《深入解析Android 5.0系统》
以下内容节选自本书
在Linux中,Futex系统调用的定义如下
#define __NR_futex
1.
int futex (int *uaddr, int op,int val, const struct timespec *timeout,
int *uaddr2, int val3);
uaddr是Futex变量,一个共享的整型计数器。
op表示操作类型,有五种预定义的值,但是在Binoc中只使用了下面两种:
1)
2)
val存放与操作op相关的值。
timeout用作操作FUTEX_WAIT中,表示等待超时时间。
uAddr2和val3很少使用。
2.
extern int __futex_wait(volatilevoid *ftx, int val, const struct timespec *timeout);
extern int __futex_wake(volatilevoid *ftx, int count);
Bionc中还有两个类似的函数,它们的原型如下:
extern int
extern int
const struct timespec*timeout);
这两个函数比前面的多了一个参数pshared。pshared的值为true表示wake和wait操作是用于进程间的挂进和唤醒;值为false表示操作用于进程内线程的挂进和唤醒。当pshared的值为false时,执行Futex系统调用的操作码为:
FUTEX_WAIT|FUTEX_PRIVATE_FLAG,
FUTEX_WAKE|FUTEX_PRIVATE_FLAG
这样内核如果检测到操作有FUTEX_PRIVATE_FLAG标记,能以更快的速度执行挂起和唤醒操作。
__futex_wait和__futex_wake函数相当于pshared等于true的情况。
3.
extern int__futex_syscall3(volatile void *ftx, int op, int val);
extern int__futex_syscall4(volatile void *ftx, int op, int val,
const struct timespec *timeout);
__futex_syscall3()相当于__futex_wake(),而__futex_syscall4()相当于__futex_wait()。这两个函数与前面的区别是能指定操作码op做为参数。操作码可以是FUTEX_WAIT,FUTEX_WAKE或者它们和FUTEX_PRIVATE_FLAG的组合。
Android中操作码的定义如下:
#define FUTEX_WAIT
#define FUTEX_WAKE
#ifndefFUTEX_PRIVATE_FLAG
#defineFUTEX_PRIVATE_FLAG
#endif
#ifndefFUTEX_WAIT_PRIVATE
#defineFUTEX_WAIT_PRIVATE
#endif
#ifndefFUTEX_WAKE_PRIVATE
#defineFUTEX_WAKE_PRIVATE
#endif
- Android的Futex系统调用
- futex的使用
- Futex
- futex
- futex
- android 调用系统的activity
- Android调用系统的库
- android 调用系统的接口
- Android调用系统的库
- android 调用系统的接口
- Android 常用的系统调用
- android系统功能的调用
- 常用的系统调用【Android】
- Android调用系统的ContentProvider
- android-调用系统的Intent
- android常用的系统调用
- Android的Intent系统调用
- Linux Futex的设计与实现
- Android ART 的初始化和启动
- Android签名漏洞分析
- Android build系统中常用LOCAL_变量
- oracle 备份与恢复系列笔记-1
- Futex同步机制简介
- Android的Futex系统调用
- Futex用户态操作
- Mutex类使用Futex实现同步
- 虚拟运营商会如何卖手机?且看JDPhone和余额宝
- Android资源匹配算法
- C语言基础学习小总结
- Android图片资源的缩放问题
- SEAndroid简介
- SEAndroid的各种策略文件