博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
unix环境高级编程-读写锁
阅读量:4213 次
发布时间:2019-05-26

本文共 1154 字,大约阅读时间需要 3 分钟。

1.需要注意的地方

  • 读写锁与互斥量类似,不过读写锁允许更高的并行性
  • 互斥量有两种状态:加锁和不加锁。读写锁有3种状态:读模式下的加锁状态,写模式的加锁状态,不加锁的状态
  • 当读写锁是写加锁状态时,在这个锁被解锁之前,所有试图对这个锁加锁的线程都会被阻塞
  • 当读写锁在读加锁状态时,所有试图以读模式对它进行加锁的线程都可以得到访问权,但任何以写模式对此锁进行加锁的线程都会阻塞
  • 还有一点,当读写锁处在读模式锁住状态,而这时有一个线程试图以写模式获取锁时,读写锁通常会阻塞随后的读模式锁请求---这样的目的:避免读模式锁长期占用,而等待的写模式锁请求一直得不到满足

2.读写锁适合的情况

读写锁非常适合对于数据结构读的次数远大于写的情况。

3.读写锁相关接口

读写锁又称为共享互斥锁,是一种特殊的自旋锁。读模式又称共享模式,写模式又称互斥模式。

#include 
int pthread_rwlock_init(pthread_rwlock_t *restrict rwlock, const pthread_rwlockattr_t *restrict attr);int pthread_rwlock_destroy(pthread_rwlock_t *rwlock);成功则返回0, 出错则返回错误编号.
#include 
int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock);int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock);int pthread_rwlock_unlock(pthread_rwlock_t *rwlock);成功则返回0, 出错则返回错误编号.这3个函数分别实现获取读锁, 获取写锁和释放锁的操作. 获取锁的两个函数是阻塞操作, 同样, 非阻塞的函数为:#include
int pthread_rwlock_tryrdlock(pthread_rwlock_t *rwlock);int pthread_rwlock_trywrlock(pthread_rwlock_t *rwlock);成功则返回0, 出错则返回错误编号.非阻塞的获取锁操作, 如果可以获取则返回0, 否则返回错误的EBUSY.
带有超时的读写锁

#include 
#include
int pthread_rwlock_timedrdlock(pthread_rwlock_t *rwlock);int pthread_rwlock_timedwrlock(pthread_rwlock_t *rwlock);

转载地址:http://ziumi.baihongyu.com/

你可能感兴趣的文章
CSS之Multi-columns的跨列
查看>>
CSS之浮动(一)
查看>>
CSS之浮动(二)
查看>>
记腾讯互娱网站布局(1)
查看>>
记腾讯互娱网站布局(2)
查看>>
记腾讯互娱网站布局(3)
查看>>
大小不固定的图片和多行文字的垂直水平居中
查看>>
display:table-cell的集中应用
查看>>
display:table-cell自适应布局下连续单词字符换行
查看>>
0115 springboot template方式操作mongodb
查看>>
0116 spring的webFlux
查看>>
解决 Asp.net 中,url传参乱码 方法之一:(UrlDecode)
查看>>
pdf的转换网址:
查看>>
c++设计模式之三~抽象工厂模式
查看>>
c++设计模式之单例模式
查看>>
c++设计模式之建造者模式
查看>>
c++设计模式之原型模式
查看>>
c++设计模式之适配器模式
查看>>
c++设计模式之桥接模式
查看>>
c++设计模式之装饰模式
查看>>