OpenThreads库介绍——ReadWriteMutex

1. 读写锁简介

OpenThreads库中的ReadWriteMutex是一种读写锁,读写锁是计算机程序的并发控制的一种同步机制,也称“共享-互斥锁”、多读者-单写者锁。多读者锁,用于解决读写问题。读操作可并发重入,写操作是互斥的。简单来说就是允许多个线程同时读取资源,但是一旦要修改资源(写操作),那么所有读的线程都必须被阻塞,直到写的线程完成修改。

2. 类型

读写锁可以根据实际的需要采用不同的策略,主要包括:

(1)更高的读取优先级(read-preferring)
(2)更高的写入优先级(write-preferring)
(3)未定义优先级(unspecified-priority-RW)

3. 实现

OpenThreads采用的实现是Raynal的一种实现,实现的伪代码如下:(使用两个Mutex和一个计数器)

  • Begin Read

Lock r.
Increment b.
If b = 1, lock g.
Unlock r.

  • End Read

Lock r.
Decrement b.
If b = 0, unlock g.
Unlock r.

  • Begin Write

Lock g.

  • End Write

Unlock g.

OpenThread采用的这种策略是read-preferring,也就是读取优先级更高。这种策略有一个劣势,就是写入数据的线程会一直等待所有的读取线程结束后才能写入。如果读取的公共资源很多,可能会造成write-starvation。

4. 参考资料:

1. 死锁,活锁,饿死,阻塞的理解

2. Readers–writer lock

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值