Young87

当前位置:首页 >个人收藏

乐观锁、悲观锁、读写锁、互斥锁之间的关系

乐观锁、悲观锁

同一维度的概念,都是从数据访问的角度来说。所以经常出现在数据库相关问题中、
即当数据同时被多个对象访问了,应该持什么态度来对数据进行保护

悲观锁认为,数据被访问,对方很可能要修改这个数据。所以在此思想的引导下,数据被访问时,不管是读还是写,步步加锁。严格排斥其他对象的访问。

乐观锁认为,数据被访问,对方不大可能要修改这个数据。所以在此思想的引导下,一个对象读这个数据,不会排斥其他的访问(包括读和写),只有在自己写的时候,通过cas的方式,确定自己写的时候,没人动过这个数据。有人动过,则取消重读再重试。

这两种锁,是两种思想。

互斥锁和读写锁

这两个是同一维度的概念,都是从“读写行为”本身角度来说的,所以经常出现的编程相关问题中:即当读写一个变量时,其他人也要读写此变量,应该制定怎样的规则,不至于让数据乱套。

互斥锁的规则,即所有单个的读、写行为互斥、资源独占
,读的时候别人不能读也不能写。写的时候,别人不能读也不能写。

读写锁的规则,读读不互斥,凡是带写的操作互斥。读的时候别人可以读但不能写。写的时候,别人不能读也不能写。

这两种锁,是实实在在的锁。

总结

互斥锁其实很符合悲观锁的思想,但二者不能混为一谈。毕竟描述角度不一样,就像老婆做的饼和老婆饼一样,虽然都叫饼,老婆做的饼是一类饼,老婆饼是特定一种商品。

读写锁跟乐观锁更是没有一毛钱关系。乐观锁没有锁定任何数据,只是通过对比+重试实现数据不乱套。

除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog

上一篇: Beef-xss安装及使用

下一篇: 短命的 CentOS 8 将停止维护

精华推荐