天天看点

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