`
webook_java
  • 浏览: 59011 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类

常见锁

 
阅读更多
共享锁【S锁】
又称读锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。

排他锁【X锁】
又称写锁。若事务T对数据对象A加上X锁,事务T可以读A也可以修改A,其他事务不能再对A加任何锁,直到T释放A上的锁。这保证了其他事务在T释放A上的锁之前不能再读取和修改A。



互斥锁:线程会从sleep(加锁)——>running(解锁),过程中有上下文的切换,cpu的抢占,信号的发送等开销。

自旋锁:线程一直是running(加锁——>解锁),死循环检测锁的标志位,机制不复杂。

两种锁的区别

互斥锁的起始原始开销要高于自旋锁,但是基本是一劳永逸,临界区持锁时间的大小并不会对互斥锁的开销造成影响,而自旋锁是死循环检测,加锁全程消耗cpu,起始开销虽然低于互斥锁,但是随着持锁时间,加锁的开销是线性增长。

两种锁的应用

互斥锁用于临界区持锁时间比较长的操作,比如下面这些情况都可以考虑

1 临界区有IO操作

2 临界区代码复杂或者循环量大

3 临界区竞争非常激烈

4 单核处理器

至于自旋锁就主要用在临界区持锁时间非常短且CPU资源不紧张的情况下。


悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作。[1]      悲观锁假定其他用户企图访问或者改变你正在访问、更改的对象的概率是很高的,因此在悲观锁的环境中,在你开始改变此对象之前就将该对象锁住,并且直到你提交了所作的更改之后才释放锁。悲观的缺陷是不论是页锁还是行锁,加锁的时间可能会很长,这样可能会长时间的限制其他用户的访问,也就是说悲观锁的并发访问性不好。

乐观锁:假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。[1] 乐观锁不能解决脏读的问题。    乐观锁则认为其他用户企图改变你正在更改的对象的概率是很小的,因此乐观锁直到你准备提交所作的更改时才将对象锁住,当你读取以及改变该对象时并不加锁。可见乐观锁加锁的时间要比悲观锁短,乐观锁可以用较大的锁粒度获得较好的并发访问性能。但是如果第二个用户恰好在第一个用户提交更改之前读取了该对象,那么当他完成了自己的更改进行提交时,数据库就会发现该对象已经变化了,这样,第二个用户不得不重新读取该对象并作出更改。这说明在乐观锁环境中,会增加并发用户读取对象的次数。
分享到:
评论

相关推荐

    SQLServer常见锁表优化语句.txt

    SQLServer常见锁表优化语句

    并发编程常见问题总结(持续更新...).pdf

    - 常见锁:如读写锁、自旋锁等。 - 锁之间的区别:不同锁有不同的适用场景和性能影响。 - 死锁:是指两个或两个以上的线程在执行过程中,因争夺资源而造成的一种互相等待的现象。 - 避免死锁:可以通过资源分配有序...

    指纹锁常见故障解决办法.docx

    ### 指纹锁常见故障解决办法 #### 一、钥匙转不动 ##### 锁芯内置前面板的型号 **故障原因**: - 前把手孔内方刚帽错位,导致转动钥匙时离合件上的销子无法进入方钢冒孔内。 **解决方法**: - 使用方杆插入前把...

    必达门锁的配置及常见故障处理

    酒店电子门锁-必达门锁的配置及常见故障处理,为配置必达门锁的酒店工程维修人员提供帮助。

    oracle常见的锁查询和处理

    Oracle数据库的锁机制是保证数据并发访问安全的重要手段,它主要分为行级锁(TX锁)和表级锁(TM锁)。行级锁确保在多用户环境下,同一时间只有一个用户可以更新特定的数据行,而其他用户可以读取,但不能进行修改。...

    常见DB2锁等待解决流程

    ### 常见DB2锁等待解决流程 #### 背景与意义 在数据库管理领域,特别是针对IBM DB2数据库的应用场景中,锁等待是一个常见的性能瓶颈问题。当两个或多个事务请求对同一资源进行操作时,如果没有妥善处理这些请求间...

    各种锁汇总,乐观锁、悲观锁、分布式锁、可重入锁、互斥锁、读写锁、分段锁、类锁、行级锁等

    常见的分布式锁实现有Zookeeper、Redis的setnx命令、RedLock算法等。 4. **可重入锁**:可重入锁允许一个线程获取同一资源的多次锁定,如Java的`synchronized`和`ReentrantLock`。这样可以避免死锁,当一个线程已经...

    三星s8 s8+ note8网络锁卡锁区域锁解锁教程

    手机网络锁是一种常见的限制措施,通常出现在与运营商捆绑销售的合约机上,尤其是国外市场。为了防止用户将手机转售至其他地区或网络,运营商会在软件层面设置网络锁,限制非特定网络SIM卡的使用。 **网络锁常见于...

    广联达加密锁,写锁工具,可以自己升级加密锁。

    加密锁在IT行业中,尤其是软件保护领域,是一种常见的技术手段,用于防止未经授权的软件复制和使用。广联达,作为中国领先的建筑信息化解决方案提供商,其加密锁产品是为确保其软件的安全性和正版化而设计的。这个...

    latch Contention

    不同的锁可能会因为不同的原因而产生竞争,下面是一些常见锁的竞争原因: - **数据块锁**:当多个会话同时尝试修改同一数据块时会发生竞争。 - **重做日志锁**:在高并发环境中,多个会话试图写入同一个重做日志文件...

    Oracle的锁表与解锁

    1. **TX锁(事务锁)**:这是最常见的锁类型,用于锁定正在修改的数据行,防止其他事务读取或修改同一行数据。这种锁是自动产生的,当一个事务开始修改数据时,Oracle会自动为这些数据行加锁。 2. **TM锁(表级锁)...

    t199锁常见几种最新写锁教程

    t199锁常见几种最新写锁教程

    thinkPHP框架乐观锁和悲观锁实例分析

    在ThinkPHP框架中,常见的有乐观锁和悲观锁两种机制。本文将通过实例分析这两种锁在ThinkPHP框架中的应用,以及它们各自的优缺点。 首先,让我们从乐观锁开始了解。乐观锁机制假设多个事务在处理数据时很少发生冲突...

    redis实现分布式锁,自旋式加锁,lua原子性解锁

    在分布式系统中,为了保证数据的一致性和安全性,分布式锁是一种常见的解决方案。Redis作为一个高性能的键值存储系统,常被用作实现分布式锁的工具。本文将深入探讨如何使用Redis实现分布式锁,以及如何利用自旋式...

    四个Java常见分布式锁的选型和性能对比.rar

    本文件主要讨论了四个常见的Java分布式锁实现:Zookeeper、Redis、RedLock以及基于数据库的乐观锁。以下是对这四种分布式锁的详细分析和性能对比。 1. Zookeeper分布式锁: Zookeeper是一个分布式协调服务,提供了...

    oracle锁机制探讨

    DML锁的目的在于保证并发情况下的数据完整性,它也是我们最常见和常用的锁,本文我们主要讨论DML锁。在Oracle数据库中,DML锁主要包括TM锁和TX锁,其中TM锁称为表级锁(用来保证表的结构不被用户修改),TX锁称为...

    互斥锁与事件锁

    在多线程编程中,互斥锁(Mutex)和事件锁(Event)是两种常见的同步机制,用于确保多个线程安全地访问共享资源。本文将深入探讨这两种锁的工作原理、使用场景及其优缺点。 首先,互斥锁是线程同步的基础工具之一。...

    安卓锁机源码

    在安卓平台上,锁机应用是一种常见的安全工具,用于保护设备免受未经授权的访问。源码是开发者进行二次开发或学习编程的重要参考资料。标题中的“安卓锁机源码”指的是一个用于创建安卓设备锁定功能的应用程序源代码...

    指纹密码锁_C51_c51门锁_c51智能锁背景_指纹门锁_指纹锁_

    密码解锁则是另一种常见且实用的身份验证方式。在C51智能门锁中,用户可以设置一个个性化的数字密码,通常由4-6位数字组成。当用户输入密码后,C51会进行校验,只有正确输入密码时,才会允许解锁。为了增强安全性,...

Global site tag (gtag.js) - Google Analytics