共享锁【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常见锁表优化语句
- 常见锁:如读写锁、自旋锁等。 - 锁之间的区别:不同锁有不同的适用场景和性能影响。 - 死锁:是指两个或两个以上的线程在执行过程中,因争夺资源而造成的一种互相等待的现象。 - 避免死锁:可以通过资源分配有序...
### 指纹锁常见故障解决办法 #### 一、钥匙转不动 ##### 锁芯内置前面板的型号 **故障原因**: - 前把手孔内方刚帽错位,导致转动钥匙时离合件上的销子无法进入方钢冒孔内。 **解决方法**: - 使用方杆插入前把...
酒店电子门锁-必达门锁的配置及常见故障处理,为配置必达门锁的酒店工程维修人员提供帮助。
Oracle数据库的锁机制是保证数据并发访问安全的重要手段,它主要分为行级锁(TX锁)和表级锁(TM锁)。行级锁确保在多用户环境下,同一时间只有一个用户可以更新特定的数据行,而其他用户可以读取,但不能进行修改。...
### 常见DB2锁等待解决流程 #### 背景与意义 在数据库管理领域,特别是针对IBM DB2数据库的应用场景中,锁等待是一个常见的性能瓶颈问题。当两个或多个事务请求对同一资源进行操作时,如果没有妥善处理这些请求间...
常见的分布式锁实现有Zookeeper、Redis的setnx命令、RedLock算法等。 4. **可重入锁**:可重入锁允许一个线程获取同一资源的多次锁定,如Java的`synchronized`和`ReentrantLock`。这样可以避免死锁,当一个线程已经...
手机网络锁是一种常见的限制措施,通常出现在与运营商捆绑销售的合约机上,尤其是国外市场。为了防止用户将手机转售至其他地区或网络,运营商会在软件层面设置网络锁,限制非特定网络SIM卡的使用。 **网络锁常见于...
加密锁在IT行业中,尤其是软件保护领域,是一种常见的技术手段,用于防止未经授权的软件复制和使用。广联达,作为中国领先的建筑信息化解决方案提供商,其加密锁产品是为确保其软件的安全性和正版化而设计的。这个...
不同的锁可能会因为不同的原因而产生竞争,下面是一些常见锁的竞争原因: - **数据块锁**:当多个会话同时尝试修改同一数据块时会发生竞争。 - **重做日志锁**:在高并发环境中,多个会话试图写入同一个重做日志文件...
1. **TX锁(事务锁)**:这是最常见的锁类型,用于锁定正在修改的数据行,防止其他事务读取或修改同一行数据。这种锁是自动产生的,当一个事务开始修改数据时,Oracle会自动为这些数据行加锁。 2. **TM锁(表级锁)...
t199锁常见几种最新写锁教程
在ThinkPHP框架中,常见的有乐观锁和悲观锁两种机制。本文将通过实例分析这两种锁在ThinkPHP框架中的应用,以及它们各自的优缺点。 首先,让我们从乐观锁开始了解。乐观锁机制假设多个事务在处理数据时很少发生冲突...
在分布式系统中,为了保证数据的一致性和安全性,分布式锁是一种常见的解决方案。Redis作为一个高性能的键值存储系统,常被用作实现分布式锁的工具。本文将深入探讨如何使用Redis实现分布式锁,以及如何利用自旋式...
本文件主要讨论了四个常见的Java分布式锁实现:Zookeeper、Redis、RedLock以及基于数据库的乐观锁。以下是对这四种分布式锁的详细分析和性能对比。 1. Zookeeper分布式锁: Zookeeper是一个分布式协调服务,提供了...
DML锁的目的在于保证并发情况下的数据完整性,它也是我们最常见和常用的锁,本文我们主要讨论DML锁。在Oracle数据库中,DML锁主要包括TM锁和TX锁,其中TM锁称为表级锁(用来保证表的结构不被用户修改),TX锁称为...
在多线程编程中,互斥锁(Mutex)和事件锁(Event)是两种常见的同步机制,用于确保多个线程安全地访问共享资源。本文将深入探讨这两种锁的工作原理、使用场景及其优缺点。 首先,互斥锁是线程同步的基础工具之一。...
在安卓平台上,锁机应用是一种常见的安全工具,用于保护设备免受未经授权的访问。源码是开发者进行二次开发或学习编程的重要参考资料。标题中的“安卓锁机源码”指的是一个用于创建安卓设备锁定功能的应用程序源代码...
密码解锁则是另一种常见且实用的身份验证方式。在C51智能门锁中,用户可以设置一个个性化的数字密码,通常由4-6位数字组成。当用户输入密码后,C51会进行校验,只有正确输入密码时,才会允许解锁。为了增强安全性,...