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

你可能感兴趣的:(OpenGL和OSG基础)