POS线程同步互斥锁和读写锁的区别和各自适用场景

时间:2022-03-15 19:26:08

读写锁特点:

1)多个读者可以同时进行读
2)写者必须互斥(只允许一个写者写,也不能读者写者同时进行)
3)写者优先于读者(一旦有写者,则后续读者必须等待,唤醒时优先考虑写者)

 

互斥锁特点:

  一次只能一个线程拥有互斥锁,其他线程只有等待

 

自旋锁:

一次只能有一个进程进入临界区,读写锁是自旋锁的一个特例。

 

应用场景:

以队列操作为例:

线程A对队列负责将数据写入队列。须采取“互斥锁”或“读写锁的写锁”

线程B队列负责从队列读出数据。须采取“互斥锁”或“读写锁的写锁”,读队列操作,不可采取“读写锁的读锁”,因为从队列读出数据时,需要更改队列本身的下标索引,如果多个线程同时操作该队列的话,就会导致队列下标索引混乱。

 

但是对队列的查询操作则最好采取“读写锁的读锁”来提高效率。