Android Framework读写锁封装
来源:互联网 发布:淘宝评价网址 编辑:程序博客网 时间:2024/05/16 08:29
Android Framework读写锁封装
Linux下线程同步对象——读写锁
读写锁又分为读锁定状态和写锁定状态,多个线程可以同时获得读锁定状态锁,但写锁定状态只能有一个线程获得,其他线程的读锁定请求和写锁定请求都将会阻塞直到当前的写锁定状态的释放。
首先介绍一下Linux下C语言中的读写锁所用到的一些函数。
(1)、创建读写锁
int pthread_rwlock_init(pthread_rwlock_t *restrict rwlock,const pthread_rwlockattr_t *restrict attr);
说明:第一个参数为读写锁变量,第二个参数为对读写锁参数设置。初始化一个读写锁变量。
(2)、销毁读写锁
int pthread_rwlock_destroy(pthread_rwlock_t *rwlock);
说明:销毁一个读写锁。
(3)、加读锁
int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock);
说明:若当前读写锁为未加锁状态或者为读锁定状态,该函数都可以获得读写锁并返回;若该读写锁为写锁定状态,则该函数将阻塞调用线程,直到该读写锁的写锁定状态释放。
(4)、尝试加读锁
int pthread_rwlock_tryrdlock(pthread_rwlock_t *rwlock);
说明:若当前读写锁为未加锁状态或者为读锁定状态,该函数都可以获得读写锁并返回;若该读写锁为写锁定状态,则该函数将立即返回错误(错误码为EBUSY),不阻塞调用线程。
(5)、加写锁
int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock);
说明:如果当前读写锁状态为未锁定,则该函数锁定该锁,并立即返回;如果该锁的状态为读锁定状态或者写锁定状态,则该函数将阻塞调用线程,直到该锁的读写状态被释放。
(6)、尝试加写锁
int pthread_rwlock_trywrlock(pthread_rwlock_t *rwlock);
说明:如果当前读写锁状态为未锁定锁定,则该函数锁定该锁,并立即返回;如果该锁的状态为读锁定状态或者写锁定状态,则该函数立即返回,并返回错误码EBUSY,不阻塞调用线程。
(7)、解锁
int pthread_rwlock_unlock(pthread_rwlock_t *rwlock);
说明:不管是读锁定状态和写锁定状态都调用这个函数解除锁定。
AndroidFramework层将读写锁封装成RWLock类,并且将上面的一些对读写锁操作的函数封装为该类的成员函数。
下面通过表格对比介绍一下AndroidFramework是如何封装上面这些函数的。
RWLock类成员变量和成员函数
说明
成员变量mRWLock
pthread_rwlock_t类型
构造函数RWLock()
调用pthread_rwlock_init()
加读锁readLock()
调用pthread_rwlock_rdlock()
尝试加读锁tryReadLock()
调用pthread_rwlock_tryrdlock()
加写锁writeLock()
调用pthread_rwlock_wrlock()
尝试加写锁tryWriteLock()
调用pthread_rwlock_trywrlock()
解锁unlock()
调用函数pthread_rwlock_unlock()
析构函数~RWLock()
调用pthread_rwlock_destroy()
- Android Framework读写锁封装
- Android Framework线程封装
- Android Framework线程封装
- .NET Framework中提供的读写锁
- 关于android framework相关的一些看法之--再封装
- Android Framework层对Linux中线程的封装
- Android ContentProvider封装数据库和文件读写总结
- 封装SDK和Framework
- framework、.a封装
- iOS 封装framework
- 文件读写封装
- 读写注册表的封装
- cookie读写封装
- Linux平台用C++封装线程读写锁
- (转)Linux平台用C++封装线程读写锁
- Linux平台用C++封装线程读写锁
- Linux平台用C++封装线程读写锁
- Linux平台用C++封装线程读写锁
- JAVA HashMap,LinkedHashMap,TreeMap,HashTable 的区别
- 第12周实验报告任务1
- 曾经的日子
- LINQ to SQL(使用sql server)
- C++Builder 2010 Release版本配置
- Android Framework读写锁封装
- 我总结的编程思想
- DirectX9 SDK Samples(9) Text3D Sample
- 函数隐藏 覆盖
- (四)线性表的顺序实现及相关操作
- 一个人逛街
- Linux下使用ssh远程登录、上传、下载
- 常见设计模式之Abstract Factory篇
- OpenStreetMap初探(八)——制作地图瓦片Kosmos及Maperitive使用