首页 > 其他分享 >并发控制

并发控制

时间:2022-11-17 18:35:43浏览次数:46  
标签:封锁 控制 事务 修改 T2 T1 并发 数据

并发控制


并发造型带来的数据不一致性

    1. 丢失修改(lost update)

      两个事务T1和T2T2读入同一数据并修改,T2提交的结果破坏了T1提交的结果,导致T1的修改丢失

    2. 不可重复读(non-repeatable read)

      事务T1读取数据后,事务T2执行更新操作,使T1无法再现前一次读取结果

    3. 读“脏”数据(dirty read)

事务T1修改某一数据并将其写回磁盘,事务T2读取同一数据后,T1由于某些原因被撤销

这时被T1修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致,则T2读到的数据就为“脏”数据,即不正确数据

并发控制的主要技术有

    • 封锁(locking)
    • 时间戳(timestamp)
    • 乐观控制(optimistic scheduler)
    • 多版本并发控制(multi-version concurrency control)

 

封锁


 基本的封锁类型有两种:排他锁(X锁)和共享锁(S锁)

1、排他锁:若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他任何事务都不能对A加任何类型的锁,直到T释放A上的锁为止

2、共享锁:若事务T对数据对象A加上S锁,则只允许T读取A,不能修改A,其他事物只能对A加S锁,不能加X锁,直至T释放A上的S锁为止

 


封锁协议


  • 一级封锁协议

事务T在修改数据R之前先对其加X锁,直到事务结束才释放

    • 可防止丢失修改并保证事务T是可恢复的
  • 二级封锁协议

    一级封锁协议基础上增加事务T在读取数据R之前先对其加S锁,读完后即可释放S锁

    • 防止丢失修改,还可以进一步防止读“脏”数据
  • 三级封锁协议

              在一级封锁协议的基础上增加事务T在读取数据R之前必须先对其加S锁,直至事务结束才释放

    • 在一级封锁协议的基础上增加事务TT,在读取数据RR之前必须先对其加SS锁,直到事务结束才释放
    • 防止丢失修改,还可以进一步防止读“脏”数据、不可重复读

 

 

标签:封锁,控制,事务,修改,T2,T1,并发,数据
From: https://www.cnblogs.com/hinima/p/16900397.html

相关文章

  • 网络编程与并发编程
    今日内容概要黏包现象解决黏包逻辑思路代码实操UDP基本代码使用并发编程理论之操作系统发展史多道技术进程理论及调度算法今日内容详细黏包现象1.服务端连......
  • 黏包现象 并发编程
    目录黏包现象struct模块struct.pack()struct.unpack()文件过大无法打包黏包问题解决黏包实战UDP协议(了解)操作系统发展史穿孔卡片阶段联机批处理系统脱机批处理系统并发......
  • JavaScript语法-特殊语法、流程控制语句
    JavaScript语法-特殊语法<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>特殊语法</title><script>//1、语句以;结尾.......
  • 黏包、udp协议、多道技术、进程并行与并发
    目录黏包现象struct模块黏包代码实战UDP协议(了解)并发编程理论多道技术进程理论进程的并行与并发进程的三状态黏包现象1.服务端连续执行三次recv2.客户端连续执行三次sen......
  • 并发编程
    并发编程理论"""计算机中真正干活的是CPU"""操作系统发展史: 1.穿孔卡片阶段计算机很庞大,使用很麻烦,一次只能给一个人使用,期间很多时候计算机都不工作 好处:程序......
  • (转)Nginx:04---Nginx的命令行控制
    原文:https://blog.csdn.net/qq_41453285/article/details/106295274在默认的情况下:Nginx安装在/usr/local/nginx/下可执行的Nginx文件为/usr/local/nginx//sbin/nginx默认......
  • nginx高并发优化之缓存配置
    一、配置http{proxy_cache_path/app/cache/levels=1:2keys_zone=proxy_cache:10mmax_size=10ginactive=60muse_temp_path=off;upstreambackend{server127......
  • Spring中手动控制事务
    在spring中大部分时候使用的是声明式事务,也就是@Transaction注解,但在某些特殊情况下也需要手动控制事务的开启/提交/回滚。工具类封装:1@Component2pu......
  • 无刷电机力矩控制模拟棘轮
    无刷电机可以通过控制力矩来实现设人机交互中的触觉反馈。下面使用灯哥开源FOC双路无刷电机控制器、ESP32开发板、无刷电机、AS5600磁编码器套件和ArduinoSimpleFOClibrar......
  • JavaScript语法特殊语法和流程控制语句以及练习99乘法表
    JavaScript语法_特殊语法1.语句以;结尾,如果一行只有一条语句则;可以省略(不建议)2.变量的定义使用var关键字,也可以不使用用:定义的变量是局部变量不用:定义对的变量......