【C/C++多线程编程之九】pthread读写锁
2014-07-16 19:00
204 查看
多线程编程之读写锁
Pthread是 POSIX threads 的简称,是POSIX的线程标准。pthread读写锁把对共享资源的訪问者分为读者和写者,读者仅仅对共享资源进行读訪问,写者仅仅对共享资源进行写操作。在相互排斥机制,读者和写者都须要独立独占相互排斥量以独占共享资源,在读写锁机制下,同意同一时候有多个读者读訪问共享资源,仅仅有写者才须要独占资源。相比相互排斥机制,读写机制因为同意多个读者同一时候读訪问共享资源,进一步提高了多线程的并发度。
1.读写锁机制:
写者:写者使用写锁,假设当前没有读者,也没有其它写者,写者马上获得写锁;否则写者将等待,直到没有读者和写者。
读者:读者使用读锁,假设当前没有写者,读者马上获得读锁;否则读者等待,直到没有写者。
2.读写锁特性:
同一时刻仅仅有一个线程能够获得写锁,同一时刻能够有多个线程获得读锁。
读写锁出于写锁状态时,全部试图对读写锁加锁的线程,无论是读者试图加读锁,还是写者试图加写锁,都会被堵塞。
读写锁处于读锁状态时,有写者试图加写锁时,之后的其它线程的读锁请求会被堵塞,以避免写者长时间的不写锁。
3.读写锁基本函数:
# include<pthread.h>
读写锁初始化:
int
pthread_rwlock_init(pthread_rwlock_t * rwlock,
const pthread_rwlockattr_t * attr);
该函数第一个參数为读写锁指针,第二个參数为读写锁属性指针。函数按读写锁属性对读写锁进行初始化。
加读锁:
int
pthread_rwlock_rdlock(pthread_rwlock_t *rwlock);
该函数參数为读写锁指针。函数用于对读写锁加读锁。
加写锁:
int
pthread_rwlock_wrlock(pthread_rwlock_t *rwlock);
该函数參数为读写锁指针。函数用于对读写锁加写锁。
释放读写锁:
int
pthread_rwlock_unlock(pthread_rwlock_t *rwlock);
该函数參数为读写锁指针。函数用于释放读写锁,包含读锁与写锁。
销毁读写锁:
int
pthread_rwlock_destroy(pthread_rwlock_t *rwlock);
该函数參数为读写锁指针。函数用于销毁读写锁。
4.牛刀小试:
演示样例使用读写锁,对共享资源data进行读写同步,线程readerM,readerN为读者线程,线程writerA,writerB为写者线程。
相关文章推荐
- 【C/C++多线程编程之九】pthread读写锁
- C/C++跨平台ini文件读写API
- C++设计日志:读写定界符文件
- c++ 文件读写简单示例
- 跨平台INI文件读写API(C++版本)
- C++中对文件进行读写操作
- C++中对文件进行读写操作
- 纯c++读写文件方式
- [转]Linux 下的线程读写锁 - 空穴来风 - C++博客
- C++ builder 的文件读写操作总结
- [C++] C++ Builder 下实现端口读写
- c++下 ini文件和注册表的读写
- ini文件纯C++读写代码
- 使用C++读写文件
- 读写磁盘文件专题--采用C/C++/MFC/WIN32(API)方式
- 关于C++文件读写的一些东西
- 在C++中实现文件的读写的基本方法
- C++ 读写MySQL经典
- [C++]文件读写操作
- C++中对文件进行读写操作