【Linux】了解读写锁及其他锁

读写锁

读写锁本质是一个自旋锁,用于处理多读少写的情况。

读写锁的行为

当前锁的状态 读锁请求 写锁请求
无锁 可以 可以
读锁 可以 阻塞
写锁 阻塞 阻塞

注意
1. 写时独占资源,读时共享资源,写锁优先级更高
2. 写与读之间既有互斥关系又有同步关系。
3. 读写锁与生产消费模型的区别:读者不会将数据独占,也不会影响其他读者的行为。

其他锁

悲观锁

在每次取数据时,总是担心数据会被其他线程修改,所以总会在取数据前先加锁,当其他线程想要访问时比阻塞挂起。典型:读锁,写锁,行锁

乐观锁

每次取数据时,都不认为数据会被其他线程修改,因此不上锁,但是在更新数据前会判断其他数据在更新前是否被修改过。主要才去两种方法:版本号机制和CAS操作。

CAS操作:当需要更新数据时,判断当前内存值与之前取到的值是否相等。若相等则更新,若不等则失败并不断尝试。

自旋锁

不断询问是否可以访问数据。

公平/ 非公平锁

由获得锁的机会是否公平判断

选择锁的方式,取决于等待获得临界资源的时间:

若等待时间较长可以选择挂起等待;若等待时间较短,可以选择自旋锁。

猜你喜欢

转载自blog.csdn.net/ly_6699/article/details/98470804
今日推荐