当前位置:嗨网首页>书籍在线阅读

17-读写信号量

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

7.5.5 读写信号量

读写信号量与信号量的关系与读写自旋锁和自旋锁的关系类似,读写信号量可能引起进程阻塞,但它可允许N个读执行单元同时访问共享资源,而最多只能有1个写执行单元。因此,读写信号量是一种相对放宽条件的粒度稍大于信号量的互斥机制。

读写自旋锁涉及的操作包括如下5种。

1.定义和初始化读写信号量

struct rw_semaphore my_rws; /定义读写信号量/

void init_rwsem(struct rw_semaphore sem); /初始化读写信号量*/

2.读信号量获取

void down_read(struct rw_semaphore *sem);

int down_read_trylock(struct rw_semaphore *sem);

3.读信号量释放

void up_read(struct rw_semaphore *sem);

4.写信号量获取

void down_write(struct rw_semaphore *sem);

int down_write_trylock(struct rw_semaphore *sem);

5.写信号量释放

void up_write(struct rw_semaphore *sem);

读写信号量一般这样被使用:

rw_semaphore rw_sem; / 定义读写信号量 /

init_rwsem(&rw_sem); / 初始化读写信号量 /

/ 读时获取信号量 /

down_read(&rw_sem);

... / 临界资源/

up_read(&rw_sem);

/ 写时获取信号量 /

down_write(&rw_sem);

... / 临界资源 /

up_write(&rw_sem);