首页 > 其他分享 >CMU15445 Concurrency Control

CMU15445 Concurrency Control

时间:2024-01-22 20:55:29浏览次数:24  
标签:Control 优先级 请求 队列 CMU15445 兼容 locks Concurrency READ

Lock Manager

lock

  1. 检查事务的隔离级别是否符合锁的要求
REPEATABLE_READ:
   The transaction is required to take all locks.
   All locks are allowed in the GROWING state
   No locks are allowed in the SHRINKING state

READ_COMMITTED:
   The transaction is required to take all locks.
   All locks are allowed in the GROWING state
   Only IS, S locks are allowed in the SHRINKING state

READ_UNCOMMITTED:
   The transaction is required to take only IX, X locks.
   X, IX locks are allowed in the GROWING state.
   S, IS, SIX locks are never allowed
  1. 是否是重复的锁请求

  2. 是否为锁升级

  3. 将锁请求加入队列

  4. 尝试获取锁,看这个请求与已经分配资源(granted)的请求(如有其他线程在读被分配了读锁)是否互斥或者说兼容;如果满足的话,其次看优先级,满足 fifo;

  1. 判断兼容性。遍历请求队列,查看当前锁请求是否与所有的已经 granted 的请求兼容。需要注意的是,在我的实现中 granted 请求不一定都在队列头部,因此需要完全遍历整条队列。锁兼容矩阵可以在 Lecture slides 中查看。若全部兼容,则通过检查。否则直接返回 false。当前请求无法被满足。
  2. 判断优先级。锁请求会以严格的 FIFO 顺序依次满足。只有当前请求为请求队列中优先级最高的请求时,才允许授予锁。优先级可以这样判断:
    如果队列中存在锁升级请求,若锁升级请求正为当前请求,则优先级最高。否则代表其他事务正在尝试锁升级,优先级高于当前请求。
  3. 若队列中不存在锁升级请求,则遍历队列。如果,当前请求是第一个 waiting 状态的请求,则代表优先级最高。如果当前请求前面还存在其他 waiting 请求,则要判断当前请求是否前面的 waiting 请求兼容。若兼容,则仍可以视为优先级最高。若存在不兼容的请求,则优先级不为最高

这里有个问题,尝试获取锁的时候,确定了当前 request 不是升级锁的请求,且判断了之前的 waiting 的 request 都与当前的兼容,那么可以获取锁(具有相同的最高优先级),那么之前 waiting 的 request 呢?

这里这段话来自 shiyi

unlock

  1. 对于 table lock,释放时检查所有的 rowlock 是否已经释放
  2. 获取对应的 lock request queue
  3. 遍历请求队列,找到 unlock 对应的 granted 请求

当隔离级别为 REPEATABLE_READ 时,S/X 锁释放会使事务进入 Shrinking 状态。当为 READ_COMMITTED 时,只有 X 锁释放使事务进入 Shrinking 状态。当为 READ_UNCOMMITTED 时,X 锁释放使事务 Shrinking,S 锁不会出现。

ref

  1. https://zhuanlan.zhihu.com/p/592700870

标签:Control,优先级,请求,队列,CMU15445,兼容,locks,Concurrency,READ
From: https://www.cnblogs.com/shinidetiehanhan/p/17978025

相关文章

  • Nacos 2.3.0 正式版发布,Nacos Controller 项目开源
    作者:杨翊新版本发布Nacos2.3.0-BETA版本经过1个多月的社区测试,修复了部分的问题并对部分新功能的使用进行了少量优化后,于2023年12月7日正式发布。Nacos2.3.0版本基于 2.3.0-BETA 版本为基础,主要进行了如下更新:基于能力协商机制,支持通过Grpc的方式进行持久化服务实......
  • Nacos 2.3.0 正式版发布,Nacos Controller 项目开源
    作者:杨翊新版本发布Nacos2.3.0-BETA版本经过1个多月的社区测试,修复了部分的问题并对部分新功能的使用进行了少量优化后,于2023年12月7日正式发布。Nacos2.3.0版本基于 2.3.0-BETA 版本为基础,主要进行了如下更新:基于能力协商机制,支持通过Grpc的方式进行持久化......
  • 解决latex在使用lstlisting环境时的Undefined control sequence.错误
    错误描述,如题,Undefinedcontrolsequence.\begin{lstlisting},查了不少的资料,起始就是一句话,缺了宏包的导入。先看代码:\documentclass[11pt,a4paper]{ctexart}\usepackage{listings}%插入代码要引入的宏包\author{gsc}\title{sample}\lstset{columns=fixed,......
  • 解决controller拿不到前端的参数
    如果在你的控制器(Controller)中无法获取前端传递的值,有几个常见的原因和解决方法:参数绑定错误:确保你的Controller方法的参数列表与前端传递的参数一致。使用@RequestParam、@PathVariable等注解来映射前端参数到方法的参数。@RestControllerpublicclassYourController{......
  • Avalonia TemplatedControl (模板控件)
    在ava中的模板控件相当于wpf中的自定义控件在下面示例中,将绘制一个文本框和一个按钮,用来组合一个搜索控件在app.axaml中加入样式<Application.Styles><FluentTheme/><StyleIncludeSource="/TemplatedControl1.axaml"/></Application.Styles>引入并使用xmlns......
  • Avalonia UserControl
    ava中的用户控件和wpf中的作用一致一般用来制作页面新建一个页面<UserControl...><StackPanelHorizontalAlignment="Center"VerticalAlignment="Center"><TextBlockText="这是一个用户控件"/><ButtonName="btn1&qu......
  • @RestControllerAdvice定义返回格式
    原文链接:如何优雅的写Controller层代码?一、拦截异常,封装返回值@RestControllerAdvicepublicclassControllerExceptionAdvice{@ExceptionHandler({BindException.class})publicResultVoMethodArgumentNotValidExceptionHandler(BindExceptione){/......
  • SpringMVC中@pathVariable 为spring的注解,都可以用在Controller 层接受前段传递的数据
    @PathVariable主要接收http://host:port/path{参数值}数据 @pathVariable作为借口是,url是http"//ww.yoodb.com/user/getUserById/2 @RequestParam主要用于接受http://host:port/path?参数名=值数据值 @ResquesrParam请求接口时,url是http://www.yoodb.com/user/getUsrBy......
  • 使用ChatGPT解决在Spring AOP中@Pointcut中的execution如何指定Controller的所有方法
    背景使用ChatGPT解决工作中遇到的问题,https://xinghuo.xfyun.cn/desk切指定类在SpringAOP中,@Pointcut注解用于定义切点表达式,而execution属性用于指定切点表达式的具体匹配规则。要指定Controller的所有方法,可以使用以下方法:使用类名和方法名进行精确匹配。例如,如果要匹配名......
  • subline text 的package control 下载插件不全的解决办法
    起初我打算在sublinetext安装几个好用的插件方便刷题使用,可是在packagecontrol上找不到该插件,但是在https://packagecontrol.io/packages/这个插件是存在的,无奈之下重装packagecontrol问题依旧存在,于是只能从本地下载导入,但是效率很低,后来我发现,是由于我的packagecontrol使用......