读写锁类似于读者写者模型。本文主要介绍读写锁的理论方面。
I、读写锁
读写锁与互斥锁类似,不过读写锁允许更高的并行性。互斥锁要么是lock状态,要么是unlock状态,而且一次只能有一个线程对其加锁。
读写锁有三种状态:
读模式下lock状态,写模式下lock状态,unlock状态。
一次只有一个线程可以占有写模式的读写锁,但是有多个线程可以同时占有读模式的读写锁(与读者写者模型一致)。
读写锁非常适合于对数据结构读的次数远大于写的情况。在读写锁的写模式下,它所保护的数据结构安全的被修改,因为一次只有一个线程可以在写模式下拥有这个锁。当读写锁在读模式下时,是要线程先获取了读模式下的读写锁,该锁所保护的数据结构就可以被多个获得读模式所的线程读取。
II、读者写者模型
对同一块区域,读者只完成读取操作,写者只完成写入操作。考虑到的问题是,写者和写者之间互斥,写者与读者之间互斥,读者与读者之间不互斥。
解决方式
采用一个互斥量w处理临界区互斥问题,当一个写者进入时加锁,出去时解锁,这保证了只能有一个写者;
另一方面,当第一个读者进入临界区时对w加锁,最后一个出临界区的读者对w解锁,在这之间进入的读者不受w的影响;
信号量mutex保护读者数量的访问,只有读者可以访问,从而得到读者数量,从而可以判断何时为w加锁与解锁。
【参考】
[1] 《深入理解计算机系统》
[2] 《UNIX环境高级编程》
欢迎转载,转载请注明出处wenmingxing 读写锁&读者写者模型