一、读写锁
相较于互斥锁而言,读写锁拥有更高的并行性。因为互斥锁会将所有试图进入临界区(即共享数据)的其他线程都给阻塞住,对于互斥锁来说,就两种状态:要么是加锁状态,要么就是不加锁(即解锁)状态。而读写锁便不一样,它是可以有三中状态的:获取用于读模式的读写锁、获取用于写模式的读写锁及不加锁(见图1)。它可以允许同一时刻有多个用于读的读写锁获得状态,但同一时刻只能允许有一个用于写的读写锁获得。因此,在满足对于临界区的读次数永大于写的次数(或是读的频率相较于写更高)时优先考虑使用读写锁。
图1 读写锁的3种状态
读写锁有如下两个规则:
(1)若没有某一个线程拥有读写锁中的写锁用于写,那么可以有若干