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。