`

锁模式

阅读更多

<o:p></o:p>
    在事务系统中很重要的一个概念就是“锁”。在事务系统中“事务”概念保证了数据访问的原子性,即单事务进程中一组数据访问的一致性,而“锁”的概念保证了数据访问的隔离性与排他性,即并发事务进程之间的同步访问的独立性。有一个数据分别有两个用户要去修改,我们需要通过一些机制来保证这些数据在某个操作过程中不会被外界修改,这样的机制也就是所谓的,即给我们选定的目标数据上锁,使其无法被其他程序修改。

一般在事务系统中的“锁”机制可以分为两种不同的模式:悲观锁模式以及乐观锁模式。这两种“锁”模式要解决的问题都大致一样:多程之间的同步访问的独立性问题。只是环境上下文有所不同。当然,这就会导致,解决该问题的方案有所区别。

乐观锁模式:乐观锁模式假设环境中需要同时访问同一数据的并发事务较多,但访问数据时间较短,事务进程可以忍受少量的数据修改失败。由于使用了如此假设,则使用的加锁方案策略就比较宽松。一般使用于数据本身相关的版本控制机制来实现。
   
    比较常见的手法就是用数据的一部分或另外增加一部分作为修改的版本号,在修改视校对版本号,一旦校对正确就同时修改数据本体与版本号;如果校对版本号失败则表示数据过期,可以回滚事务。使用该方式时,如果访问数据的事务进程都来自同一个系统,则完全可以达到隔离要求。然而,如果事务进程是来自不同系统,那么事情就比较麻烦了。因为,两个系统不是相同的“锁”方案就会导致混乱的局面。这时候可能就需要严格一些的乐观锁。
   
    较之前的乐观锁实现方案,还有一种比较严格的乐观锁方案。就是在版本号上做文章,使用数据完全关联的版本号。比如,对整个数据进行
hash处理得出一个版本号。每当修改数据的任何一部分时都先检查校对版本号,一旦成功就更新的数据以及整个新的数据的hash版本号;如果校对版本号失败则表示数据过期,可以回滚事务。使用该策略,可以包保证的多系统访问独立性。然而,不论是把这个hash过程放在事务进程所在的系统还是放在数据所在的系统均会对整个体系的性能造成影响。

悲观锁模式:悲观锁,正如其名,它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度。其策略也就比较严格,在整个数据被访问的期间该“锁”都将锁住数据禁止他人访问。一般使用数据所在系统本身的功能来实现悲观锁。

举个具体例子:有些关系数据库管理系统支持select …for update功能。该功能表示,在用户使用该查询语句时,系统将锁住被选的数据项或数据表。这样就拒绝了其他用户访问,直到该用户主动解开锁,或者锁超时。

参考:"POEAA", http://blog.sohu.com/members/walker/

分享到:
评论

相关推荐

    XPWin7键盘锁(新增全锁模式下的调出方式)

    描述中的“新增全锁模式下的调出方式”意味着该软件已经进行了更新,添加了一种新的激活键盘锁定功能的方法,特别是在全屏模式下。全锁模式通常是指当系统或应用处于全屏状态时,键盘锁依然可以被触发,这可能通过...

    java实现单例模式-双重校验锁模式(线程安全)

    双重校验锁模式结合了懒汉模式和饿汉模式的优点,既实现了延迟加载,又保证了线程安全。你可以根据需求选择合适的单例模式实现方式。

    对oracle锁几种模式的理解

    #### 一、Oracle锁模式概述 在Oracle数据库中,为了保证数据的一致性和完整性,引入了多种类型的锁机制。这些锁机制能够有效地控制并发操作,防止不同用户或进程间的相互干扰。Oracle锁分为多个级别,包括行级锁...

    Vastbase G100锁机制

    ROW SHARE 锁模式是次弱的锁模式,SELECT FOR UPDATE 和 SELECT FOR SHARE 命令在目标表上取得一个这种模式的锁,ROW SHARE 锁模式与 EXCLUSIVE 和 ACCESS EXCLUSIVE 锁模式冲突。 ROW EXCLUSIVE 锁模式是次强的锁...

    oracle锁机制探讨

    这样在事务加锁前检查TX锁相容性时就不用再逐行检查锁标志,而只需检查TM锁模式的相容性即可,大大提高了系统的效率。TM锁包括了SS、SX、S、X等多种模式,在数据库中用0-6来表示。不同的SQL操作产生不同类型的TM锁...

    深入剖析Java中的双检锁模式:实现、陷阱与最佳实践

    在Java并发编程中,双检锁(Double-Checked Locking)是一种用于减少同步开销的优化技术,尤其适用于懒加载(lazy initialization)的场景。本文将详细探讨双检锁的工作原理、潜在问题以及如何安全地实现它。 双检锁...

    sybase数据库查被锁的表.doc

    Sybase 数据库锁机制和锁表查询 Sybase 数据库锁机制是指数据库管理系统中用于控制并发访问和维护数据一致性的机制。锁机制可以防止多个事务同时访问同一资源,避免数据的不一致和损坏。 在 Sybase 数据库中,锁...

    斯维尔三维算量写锁

    这样的处理模式不仅保证了数据的安全性,还提高了团队成员之间的协作效率。 斯维尔三维算量软件在提升工作效率方面的另一个体现是,其不断推出的更新补丁和驱动程序。这些更新通常包括对已知问题的修复、性能的提升...

    表是否被锁住

    在查询中,`mode_held`和`mode_requested`列分别表示已持有的锁模式和请求的锁模式。模式的解码如下: - `None`: 没有锁。 - `NULL`: 未指定锁模式。 - `ROW-S(SS)`: 共享行锁。 - `ROW-X(SX)`: 排他行锁。 - `...

    SAP ABAP应用程序中"锁"的介绍

    在SAP ABAP应用程序中,锁机制是保证数据一致性、防止并发访问时产生数据不一致性的关键工具。...开发者应根据业务场景选择合适的锁模式,合理设置锁参数,以确保系统的稳定运行和数据的准确无误。

    数据库锁学习文档

    Oracle提供了视图v$lock来查看锁的状态,包括会话ID、锁类型、对象ID、回滚段位置、锁模式和请求模式等信息,这有助于诊断和解决并发问题。 在实际操作中,我们可以通过示例来理解锁的工作原理。例如,在插入数据时...

    DB2锁相关情况介绍

    ### DB2锁相关情况介绍 ...DB2的锁机制是其并发控制的核心,通过合理配置锁模式和管理策略,可以显著提高数据库系统的性能和稳定性。对于DBA来说,深入理解DB2的锁机制是优化数据库设计、解决性能瓶颈的关键。

    数据库锁的详细介绍

    Oracle 中的锁模式: 1. ROW SHARE(RS):为了更新,每个事务在表中锁定了行,但允许其他事务锁定表中的其他行。 2. ROW EXCLUSIVE(RX):为了更新,每个事务在表中锁定了行,但不允许其他事务锁定表中的其他行。...

    Hibernate的乐观锁与悲观锁

    Hibernate支持多种锁模式: - **LockMode.NONE**:不使用锁机制。 - **LockMode.WRITE**:在插入或更新记录时自动获取锁。 - **LockMode.READ**:在读取记录时自动获取锁。 - **LockMode.UPGRADE**:使用数据库的`...

    行业分类-电子-关于可切换驱动模式的电子锁的介绍分析.rar

    标题中的“可切换驱动模式的电子锁”是一个关键概念,这通常指的是电子锁系统具备多种工作方式,可以适应不同环境或安全需求。这种技术在现代智能安防领域具有广泛应用,尤其在电子政务、智能家居、商业安全等方面。...

    Hibernate乐观锁和悲观锁分析

    Hibernate支持的悲观锁模式有`LockMode.UPGRADE`(对应SQL的`for update`)和`LockMode.UPGRADE_NOWAIT`(Oracle特有的,用于立即返回等待超时的结果)。 **乐观锁(Optimistic Locking)** 乐观锁则相对乐观,它...

    C#面向对象设计模式纵横谈-1.Singleton 单件(创建型模式)

    双检锁模式结合了两者优点,既保证了线程安全,又延迟了初始化,代码如下: ```csharp public sealed class Singleton { private static volatile Singleton instance; private static object syncRoot = new ...

    hibernate的乐观锁和悲观锁

    **Hibernate的锁模式**: - `LockMode.NONE`:不使用任何锁机制。 - `LockMode.WRITE`:Hibernate在插入或更新记录时自动获取。 - `LockMode.READ`:Hibernate在读取记录时自动获取。 - `LockMode.UPGRADE`:利用...

    基于云服务器的远程门锁控制系统.pdf

    在远程解锁模式下,门锁端上电后默认为远程解锁模式,用户通过手机端APP选择相应的解锁模式。 门锁软件设计方面,系统提供三种解锁模式:远程解锁模式、密码解锁模式和指纹解锁模式。远程解锁模式允许用户通过手机...

    db2_查询锁方法

    该命令将返回一系列锁的相关信息,例如锁的时间戳、数据库名称、代理ID、应用程序名称、用户标识符、表空间名称、模式名称、表名称、文件ID、锁对象类型、锁名、锁模式、锁状态、锁升级方式以及分区号等。...

Global site tag (gtag.js) - Google Analytics