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. 有必要了解的大数据知识(一) Hadoop

    前言 之前工作中,有接触到大数据的需求,虽然当时我们体系有专门的大数据部门,但是由于当时我们中台重构,整个体系的开发量巨大,共用一个大数据部门,人手已经忙不过来,没法办,为了赶时间,我自己负责的系统的 ...

  2. 图解 | 原来这就是 IO 多路复用

    为了讲多路复用,当然还是要跟风,采用鞭尸的思路,先讲讲传统的网络 IO 的弊端,用拉踩的方式捧起多路复用 IO 的优势. 为了方便理解,以下所有代码都是伪代码,知道其表达的意思即可. Let's go ...

  3. (原创)高DPI适配经验系列:(一)缩放比例与DPI对应关系

    一.前言 当下,2K分辨率已成为主流标配,3K.4K也已经广泛应用. 在屏幕尺寸不变的情况下,高分辨率也就意味着高DPI,对于桌面程序而言,除了先天就支持高DPI的框架外(如UWP.Electron等 ...

  4. Go Protobuf(比xml小3-10倍, 快20-100倍)

    简介 Protocol Buffers是什么? protocol buffers 是一种灵活,高效,自动化机制的结构数据序列化方法-可类比 XML,但是比 XML 更小.更快.更为简单.你可以定义数据 ...

  5. Kotlin编写Processing程序(使用函数式编程思维和面向接口方式)

    写一例Kotlin编写的Processing程序,充分调用函数式编程思维和面向接口的编程思维,供自己和读者参考学习. 初衷 想要实现一行行的文字排版功能,每一行作为一个单位,可制定显示的位置.大小.文 ...

  6. Docker工具的使用

    初识 Docker jdk的版本问题,环境造成的问题很常见,称为代码的水土不服 把环境和代码一起传过去 软件跨环境迁移的问题就解决了 Docker 是一个开源的应用容器引擎 诞生于 2013 年初,基 ...

  7. Boxes in a Line UVA - 12657

      You have n boxes in a line on the table numbered 1...n from left to right. Your task is to simulat ...

  8. Firefox 启动带有配置信息

    若不设置进行下述配置,那么 webdriver 每次启动火狐浏览器,默认都是一个不太有任何插件的浏览器被启动. 通过配置的方式,指定一个浏览器设置来启动,就可以使用以前安装的插件或配置信息了. 步骤一 ...

  9. IDEA 2021版新建Maven、TomCat工程

    目录 2021版IDEA中Maven.TomCat配置 1.基于Webapp创建一个Maven项目 1.1 新建项目模板 1.2 指定名称 1.3 指定信息 1.4 指定Maven地址 1.5 构建成 ...

  10. Leecode第二题:两数相加

    Leecode2 先看题目 : 给你两个 非空 的链表,表示两个非负的整数.它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字. 请你将两个数相加,并以相同形式返回一个表示和的 ...