[pthread]读写锁
来源:互联网 发布:网络游戏软件开发 编辑:程序博客网 时间:2024/06/11 08:36
pthread_rwlock_t 结构体的定义:
struct { int __lock; unsigned int __nr_readers; unsigned int __readers_wakeup; unsigned int __writer_wakeup; unsigned int __nr_readers_queued; unsigned int __nr_writers_queued; /* FLAGS must stay at this position in the structure to maintain binary compatibility. */ unsigned char __flags; unsigned char __shared; unsigned char __pad1; unsigned char __pad2; int __writer;} __data;
说明
- 当我们使用pthread_rwlock_rdlock()获取一次读锁时,__nr_readers字段就会加一。就算是同一个线程,在已经获得读锁的情况下,再去获取读锁,__nr_readers字段仍然会加一的,当我们调用pthread_rwlock_unlock()一次时,__nr_readers就会减一,如果我们重复加了读锁,必须重复调用pthread_rwlock_unlock()来使__nr_readers减一,否则其他线程再想获取写锁时,是会阻塞的。
- __writer记录此时是谁占用着写锁,每一个线程都会用不同的ID号表示。
- __nr_readers_queued和__nr_writers_queued字段表示有多少线程正等待加锁。注意,当想要获取读锁,但是发现__nr_writers_queued字段不为0,自己是无法获取读锁的,防止线程饥饿。
- 如果获取了一次读锁,但是却错误的调用了两次pthread_rwlock_unlock(),会出现什么情况呢?自己在ubuntu上试了一下,__nr_readers变成了一个很大的数[0-1],造成以后的写锁可能再也获取不了。
- 如果自己已经获取了写锁,再去加读锁,pthread_rwlock_wrlock()是会返回出错的; 如果自己已经获取了读锁,再去加写锁,会出现死锁的。
阅读全文
0 0
- pthread读写锁
- [pthread]读写锁
- pthread读写锁pthread_rwlock_t
- pthread读写锁,写优先设置
- 多线程编程之八:pthread读写锁
- Linux下pthread的读写锁的优先级问题
- 【C/C++多线程编程之九】pthread读写锁
- 使用pthread互斥体+条件变量实现读写锁
- 读写锁原理和pthread中的实现分析
- [并发并行]_[中级]_[实现Pthread线程并发读写锁rwlock]
- pthread多线程编程+锁
- Pthread锁机制
- pthread里面的锁
- Pthread锁机制
- Pthread锁机制
- Pthread
- pthread
- pthread
- HDU 2602 Bone Collector(01背包)
- jquery 追加
- Angular(1)
- 漫画算法:什么是一致性哈希?
- 二分查找的几种方法对比,C++实现
- [pthread]读写锁
- NSRunLoop翻译
- Andorid绘制学习——贝塞尔曲线(二阶实战水波效果)
- 文件拷贝和流的套接
- linux内存文件系统
- 在macbook上安装最新版的gcc
- 在c#中 RemoveAt、 Remove、delete用法区别
- NIO浅显易懂的入门
- javabean的简单实现