读写锁特点:
1)多个读者可以同时进行读
2)写者必须互斥(只允许一个写者写,也不能读者写者同时进行)
3)写者优先于读者(一旦有写者,则后续读者必须等待,唤醒时优先考虑写者)
互斥锁特点:
一次只能一个线程拥有互斥锁,其他线程只有等待
自旋锁:
一次只能有一个进程进入临界区,读写锁是自旋锁的一个特例。
应用场景:
以队列操作为例:
线程A对队列负责将数据写入队列。须采取“互斥锁”或“读写锁的写锁”
线程B队列负责从队列读出数据。须采取“互斥锁”或“读写锁的写锁”,读队列操作,不可采取“读写锁的读锁”,因为从队列读出数据时,需要更改队列本身的下标索引,如果多个线程同时操作该队列的话,就会导致队列下标索引混乱。
但是对队列的查询操作则最好采取“读写锁的读锁”来提高效率。