1.饮料

这是一杯饮料。

这是3杯饮料,每杯饮料的味道各不相同。

但是人类并不称呼【饮料】为【饮料】,而是称呼【饮料】为【记录】。

2.红章鱼

这个红色的,长的像章鱼的家伙,我们就叫它红章鱼~

红章鱼分为头部和触手两个部分。

红章鱼有触手,且可以有任意根触手。

红章鱼爱喝饮料,把触手伸进杯子就能吸到饮料。

红章鱼将不同的触手伸进不同的杯子,就可以同时喝多杯饮料。

多只红章鱼可以同时出现。

但是正在喝饮料的红触手会排斥其它触手,即一杯饮料里最多只能有一只红触手。

先来先得,后来的触手要排队。

同一杯饮料可以有多只红章鱼在按序排队等待。

红章鱼痴迷同时吸吮多杯饮料的感觉,所以它的所有触手要么全在等待,要么全在喝饮料。

也就是说,如果红章鱼的某只触手在排队,那么它的其它触手也必须排队,即使是没人喝的饮料也要排队。

有触手排队但是没触手伸进去喝的饮料,仍然可以被后来的其它章鱼喝。

但是人类并不称呼【红章鱼】为【红章鱼】。

人类称呼【红章鱼的头部】为【意向排它锁】;

人类称呼【正在喝饮料的红触手】为【排它记录锁】。

3.绿章鱼

这些是绿章鱼。

绿章鱼的绝大多数特性和红章鱼完全相同,除了一点:绿章鱼的触手愿意跟其它绿色触手一起分享饮料。

因为红章鱼不会向其它任何颜色的章鱼分享饮料,且绿章鱼只会向绿章鱼分享饮料,

所以红章鱼和绿章鱼不会同时喝同一杯饮料,后来的要排队。

根据以上规则,红章鱼和绿章鱼可以组成很多状态。下面就是一种,编号表示他们来的顺序。

但是人类并不称呼【绿章鱼】为【绿章鱼】,

人类称呼【绿章鱼的头部】为【意向共享锁】;

人类称呼【正在喝饮料的绿触手】为【共享记录锁】。

4.空地

事实上,饮料杯未必都是相邻的,它们之间可能有空地。

无论两个饮料杯相隔多远,它们之间如果没有其它饮料杯,那我们就说这两个饮料杯之间是同一块空地。

最左边的杯子的左边,最右边的杯子的右边,仍然是空地。

对于章鱼来说,除了喝饮料的触手以外,有时候它们会有一些多余的触手,它们会在`喝饮料的时候`把多余的触手放到杯子间的空地上休息。

因为空地上啥都没有,在空地上的触手不用抢着喝饮料,所以在空地上红绿颜色的触手可以和平共处。

但是人类并不称呼【空地】为【空地】,

人类称呼【空地】为 【记录间的间隙】;

人类也不称呼那些【在空地上的触手】为【空地上的触手】,

人类称呼【在空地上的触手】为【间隙锁】;

如果一只章鱼把一只触手伸进了一杯饮料吮吸,恰巧把另一只触手放在紧挨该饮料的左边休息,那么人类会称呼这两只触手为一个【临键锁】。

4.黑触手

这个世界存在另一种红章鱼,这种红章鱼的触手是黑色的。

黑色的触手跟红绿颜色的触手都不同,黑色的触手没办法吸食饮料。

但是黑触手有一个逆天的功能,就是当黑触手接触空地时,在接触点会凭空生成一杯饮料出来!

因为黑触手可以创造出章鱼爱喝的饮料,所以其它章鱼对黑触手奉若神明,当黑触手接触到空地后,其它触手不会过来打扰。

黑触手只会降落在没有其它触手的空地。

一只有黑触手的红章鱼,可以在同一片空地上放下多只触手(如果空间足够)。

也可以在不同的空地同时放下多只触手。

但是人类并不称呼【落在空地上的黑触手】为【落在空地上的黑触手】,

人类称呼【落在空地上的黑触手】为【意向插入锁】,并且认为它是【间隙锁】的一种。

5.激光

下图是一条红色的激光,横在了所有杯子上方。

红激光十分灼热,红章鱼和绿章鱼碰到红激光就会被烧伤,所以红激光存在的时候,章鱼们就在上方盘旋不敢下来。

另一方面,没有任何触手在饮料杯或空地上时,红激光才有可能出现。

这是绿色的激光。

绿激光比较柔和,绿色的东西能够无伤的穿过绿激光,所以绿章鱼不受绿激光的影响。

事实上,绿激光可以同时出现多条,而红激光最多出现一条,且红绿激光不会同时存在。

但是人类不称呼【红激光】为【红激光】,人类称呼【红激光】为【排它表锁】。

人类也不称呼【绿激光】为【绿激光】,而是称呼【绿激光】为【共享表锁】。

[参考] 15.7 InnoDB Locking and Transaction Model

迷失在Mysql的锁世界~的更多相关文章

  1. MYSQL(基本篇)——一篇文章带你走进MYSQL的奇妙世界

    MYSQL(基本篇)--一篇文章带你走进MYSQL的奇妙世界 MYSQL算是我们程序员必不可少的一份求职工具了 无论在什么岗位,我们都可以看到应聘要求上所书写的"精通MYSQL等数据库及优化 ...

  2. mysql乐观锁总结和实践--转

    原文地址:http://chenzhou123520.iteye.com/blog/1863407 上一篇文章<MySQL悲观锁总结和实践>谈到了MySQL悲观锁,但是悲观锁并不是适用于任 ...

  3. 【MySQL】锁入门

    要做的完全掌握MySQL/InnoDB的加锁规则,甚至是其他任何数据库的加锁规则,需要具备以下的一些知识点 了解数据库的一些基本理论知识:数据的存储格式 (堆组织表 vs 聚簇索引表):并发控制协议 ...

  4. mysql行锁和表锁

    mysql innodb支持行锁和表锁,但是MyIsam只支持表锁.现在我们说说mysql innodb的行锁和 有如下表id为主键 为了出现演示效果,我们将mysql的autocommit设置为0 ...

  5. MYSQL的锁介绍,以及死锁发生情况-带例子

    mysql锁能在并发情况下的mysql进行更好的优化 MySQL有三种锁的级别:页级.表级.行级,这3种锁的特性可大致归纳如下: 表级锁:开销小,加锁快:不会出现死锁:锁定粒度大,发生锁冲突的概率最高 ...

  6. 《MySQL悲观锁总结和实践》乐观锁

    mysql乐观锁总结和实践 博客分类: MyBatis 数据库 mysql数据库乐观锁悲观锁 上一篇文章<MySQL悲观锁总结和实践>谈到了MySQL悲观锁,但是悲观锁并不是适用于任何场景 ...

  7. [转]关于MYSQL Innodb 锁行还是锁表

    关于mysql的锁行还是锁表,这个问题,今天算是有了一点头绪,mysql 中 innodb是锁行的,但是项目中居然出现了死锁,锁表的情况.为什么呢?先看一下这篇文章. 目时由于业务逻辑的需要,必须对数 ...

  8. mysql myisam 锁表问题<转>

    转自http://yafei001.iteye.com/blog/1841258 锁是计算机协调多个进程或线程并发访问某一资源的机制 .在数据库中,除传统的计算资源(如CPU.RAM.I/O等)的争用 ...

  9. mysql的锁--行锁,表锁,乐观锁,悲观锁

    一 引言--为什么mysql提供了锁 最近看到了mysql有行锁和表锁两个概念,越想越疑惑.为什么mysql要提供锁机制,而且这种机制不是一个摆设,还有很多人在用.在现代数据库里几乎有事务机制,aci ...

随机推荐

  1. juc下Condition类解析

    在使用Lock之前,我们使用的最多的同步方式应该是synchronized关键字来实现同步方式了.配合Object的wait().notify()系列方法可以实现等待/通知模式. Condition接 ...

  2. 【odoo14】第二十三章、管理邮件

    邮件集成是odoo最重要的特性.我们可以通过odoo收发邮件.我们甚至可以管理业务文档上的电子邮件,如潜在客户.销售订单和项目.本章,我们将探讨在odoo中处理邮件的方式. 配置邮件服务器 管理文档中 ...

  3. canvas绘制图像轮廓效果

    在2d图形可视化开发中,经常要绘制对象的选中效果. 一般来说,表达对象选中可以使用边框,轮廓或者发光的效果.  发光的效果,可以使用canvas的阴影功能,比较容易实现,此处不在赘述. 绘制边框 绘制 ...

  4. D. 【例题4】字符串环

    解析 字符串的操作,可以用函数解决这个问题 s 2. f i n d ( s 1. s u b s t r ( i , j ) ) s2.find~(s1.substr~(i,~j)) s2.find ...

  5. --系统编程-网络-tcp客户端服务器编程模型、socket、htons、inet_ntop等各API详解、使用telnet测试基本服务器功能

    PART1 基础知识 1. 字节序 网络字节序是大端字节序(低地址存放更高位的字节), 所以,对于字节序为小端的机器需要收发网络数据的场景,要对这些数据进行字节序转换. 字节序转换函数,常用的有四个: ...

  6. OO_Unit2_Summary

    经过三周的自己电梯瞎设计,下次坐电梯想我想的可能就不是如何优化调度算法,而是千万别把自己死锁在电梯里了(手动狗头) 一.设计策略 1. 需求分析: 作业一:单部多线程可稍带电梯,一部电梯,固定楼层,不 ...

  7. BUAA_2020_OO_UNIT4_REVIEW&ALL_REVIEW

    OO第四单元总结&&学期总结 1. 第四单元作业总结 本单元三次作业都围绕了UML图的建模展开,第十三次作业只有类图,第十四次作业增加了顺序图和状态图,第十五次增加了部分UML规则的判 ...

  8. 研发效率破局之道 Facebook工作法

    如果你问中国和美国互联网公司都有什么差别,很多人会回答:低效加班文化.最近爆出的996大讨论,通过糙快猛打拼和996加班去抢占市场获得机会的成功案例越来越少.至此,只有提高效能才是出路. 由于软件开发 ...

  9. MVVM框架理解

    MVC框架 将整个前端页面分成View,Controller,Modal,视图上发生变化,通过Controller(控件)将响应传入到Model(数据源),由数据源改变View上面的数据. 整个过程看 ...

  10. adb 简介与常用命令

    1. abd 简介 2. adb 常用命令 1. abd 简介 adb 的全称为 Android Debug Bridge,就是起到调试桥的作用. 借助 adb 工具,我们可以管理设备或手机模拟器的状 ...