0
点赞
收藏
分享

微信扫一扫

Learning C++ No.28 【C++11语法实战】

一世独秀 2023-06-10 阅读 38
javalock

在这里插入图片描述

                                                                              💧 乐观锁与悲观锁 \color{#FF1493}{乐观锁与悲观锁} 乐观锁与悲观锁💧          



文章目录


🌊一、乐观锁简介

    💧乐观锁是一种并发控制策略,它假设多个事务在执行期间不会发生冲突。当一个事务读取数据时,它会检查该数据的版本号是否与自己的版本号一致。如果一致,则认为该数据未被其他事务修改过,可以安全地进行更新操作;否则,认为该数据已被其他事务修改过,需要重新获取最新版本号并重试更新操作。

🌊二、悲观锁简介

    💧悲观锁也是一种并发控制策略,它假设多个事务在执行期间会发生冲突。当一个事务读取数据时,它会先对该数据行加锁,防止其他事务修改该数据行。当一个事务完成对数据的更新操作后,会释放锁资源,其他事务才能继续访问该数据行。

🌊三、乐观锁和悲观锁的优缺点

乐观锁的优点

  • 不需要额外的存储空间来记录锁定信息。
  • 可以减少死锁的可能性。
  • 可以提高并发性能

乐观锁的缺点

  • 可能存在“脏读”问题。因为其他事务可能已经修改了数据,但是由于版本号不一致,当前事务仍然认为数据是未修改状态。
  • 可能存在“不可重复读”问题。因为其他事务可能在当前事务读取数据之前就已经修改了数据,导致当前事务读取到的数据不是最新的。
  • 可能存在“幻读”问题。因为其他事务可能在当前事务读取数据之后插入了新的数据行,导致当前事务查询到的结果集发生变化。

悲观锁的优点

  • 可以保证数据的一致性。
  • 可以避免“脏读”、“不可重复读”和“幻读”等问题。

悲观锁的缺点

  • 需要额外的存储空间来记录锁定信息。
  • 可能降低并发性能。
  • 如果多个事务同时访问同一数据行,可能会出现死锁问题。

🌊四、适用场景

乐观锁适用于读多写少的场景↓

    💧因为在这种情况下,多个事务同时访问同一数据行的可能性较小,而且不需要保证数据的一致性。

悲观锁适用于读写都比较频繁的场景↓

    💧因为在这种情况下,需要保证数据的一致性,而且需要避免死锁问题。

在这里插入图片描述


🐳结语

🐬初学一门技术时,总有些许的疑惑,别怕,它们是我们学习路上的点点繁星,帮助我们不断成长。

🐟积少成多,滴水成河。文章粗浅,希望对大家有帮助!

举报

相关推荐

0 条评论