`
lanhongbo
  • 浏览: 2748 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

并发与锁

 
阅读更多
   锁机制,就是在需要修改的数据上加互斥锁,通过互斥锁避免数据被同时修改。锁机制更具其应用环境又分为乐观锁和悲观锁

乐观锁 乐观锁,指认为冲突很少发生,所以只是在数据修改的时候比较修改的基础数据和数据库中的数据是否相同,相同则修改,否则提示用户重新装入数据库中已经变化的数据。

实现方法 1 :在进行 update 的时候使用 where 条件,在 Where 标间中比较所有上一步中查询得到的数据。如果数据库中的数据没有变化,则 update 可以更新到内容,否则 update 语句不能更新到内容,可以根据 update 的返回值确定更新是否成功。

实现方法 2 :在每一个表中追加一个特殊字段,类型为 timestamp ,每次更新的时候比较这个字段的值是否一致,如果一致,则更新,同时将这个字段更新为当前时间,否则,说明数据已经变更。这也可以使用 update 加上 where 实现。

悲观锁 悲观锁指,需要修改的数据,在读取的时候就对数据加锁,其他用户在准备修改,读取数据的阶段判断数据是否上锁,以此来决定是否进行修改前的读操作。

实现方法:
通常在数据库中建立一张 lock 表,该表的字段包括,表明,唯一索引,时间,用户信息等。 在用户读取数据准备修改的时候,首先判断 lock 表中是否存在自己将要读取的数据。 如果不存在,则在 lock 表中添加一条记录,记录对那张表的哪行数据进行修改;如果存在,在判断时间字段是否超时。 如果超时,则更新 lock 表中本条记录的时间字段。(防止死锁的必要手段) 如果存在,也不超时,说明本条记录正在被其他用户修改,则返回并发信息。
分享到:
评论

相关推荐

    laravel分布式并发锁

    在 Laravel 框架中,分布式并发锁是一个关键的概念,特别是在高并发的场景下,它能够确保多个请求在处理同一资源时不会发生冲突。这里,我们深入探讨 Laravel 的并发锁机制,以及如何在 PHP 开发中利用这个特性。 ...

    oracle并发和锁机制

    oracle并发和锁机制,oracle并发锁,oracle锁

    Redis高并发分布式锁实战 6

    Redis高并发分布式锁实战_6

    04-大厂生产级Redis高并发分布式锁实战-ev.rar

    04-大厂生产级Redis高并发分布式锁实战_ev.rar04-大厂生产级Redis高并发分布式锁实战_ev.rar04-大厂生产级Redis高并发分布式锁实战_ev.rar04-大厂生产级Redis高并发分布式锁实战_ev.rar04-大厂生产级Redis高并发...

    net并发数据结构读写锁

    【并发数据结构与读写锁】在多线程编程中,确保线程安全至关重要,而读写锁(ReaderWriterLock)是一种高效的线程同步机制,特别适用于读操作频繁而写操作较少的情况。读写锁允许多个线程同时读取资源,但只允许一个...

    C#实操控制并发之Lock和Redis分布式锁

    本文将深入探讨C#中如何使用Lock和Redis分布式锁来解决并发问题,以秒杀系统为例进行阐述。 首先,让我们理解什么是并发控制。并发控制是指在多线程环境下确保数据的一致性和完整性,防止多个线程同时访问同一资源...

    并发控制—悲观锁和乐观锁

    并发控制—悲观锁和乐观锁

    DB2和 Oracle的并发控制(锁)比较

    例如,S锁与S锁兼容,但S锁与X锁不兼容。 **2.3 DB2锁的升级** 为了减少锁所需的内存开销,DB2提供了一种称为锁升级的机制。这种机制允许数据库管理系统自动将行锁升级为表锁,以减少整体的锁数量。锁升级可以通过...

    C#解决SQlite并发异常问题的方法(使用读写锁)

    本文实例讲述了C#解决SQlite并发异常问题的方法。分享给大家供大家参考,具体如下: 使用C#访问sqlite时,常会遇到多线程并发导致SQLITE数据库损坏的问题。 SQLite是文件级别的数据库,其锁也是文件级别的:多个线程...

    Java并发篇乐观锁,悲观锁,自旋锁

    Java并发编程中,锁是确保线程安全的关键机制。本文主要讨论了四种锁类型:乐观锁、悲观锁、自旋锁以及Java中的synchronized同步锁,并深入解析了synchronized锁的内部机制,包括其核心组件、实现方式以及锁的状态。...

    基于JDK源码解析Java领域中的并发锁之设计与实现.pdf

    在Java并发编程中,理解和掌握并发锁的原理与实现至关重要,因为它们是解决多线程环境下的互斥和同步问题的关键。本文将基于JDK源码解析Java领域中的并发锁,探讨AQS基础同步器、LockSupport、Condition接口、Lock...

    Java多线程高并发篇(一)--重入锁

    1. **公平锁与非公平锁**:`ReentrantLock`提供了两种获取锁的策略,公平锁和非公平锁。公平锁保证等待最久的线程优先获得锁,而非公平锁则不保证线程获取锁的顺序,可能会导致饥饿现象。`ReentrantLockFairDemo....

    Oracle中使用锁进行并发控制

    ### 隔离级别与锁的关系 Oracle支持三种主要的事务隔离级别:`Read Committed`、`Serializable` 和 `Read Only`。每个隔离级别决定了锁的使用方式和强度,从而影响事务之间的交互和数据的一致性。 - **Read ...

    SQLite教程(十二):锁和并发控制详解

    与其他如MySQL、Oracle等数据库系统相比,SQLite的数据都存储在一个文件中,使用粗粒度的文件锁,这限制了其并发性和可扩展性。 回滚日志是SQLite保证事务一致性的关键机制。当有数据修改时,SQLite会先将原始数据...

    SpringBoot 使用 Redis 分布式锁解决并发问题.docx

    综上所述,通过使用基于Redis的分布式锁,我们可以有效地解决多实例服务并发导致的问题,确保数据的一致性和服务的稳定性。在SpringBoot中,结合RedisTemplate和Lua脚本,我们可以构建高效、可靠的分布式锁解决方案...

    java并发规范(线程及锁).docx

    9. **分离锁与分散锁**:尽可能选择分离锁(如`ReentrantReadWriteLock`)或无锁数据结构(如`ConcurrentHashMap`),以提高并发性能。 10. **基于`ThreadLocal`避免锁**:在某些情况下,使用`ThreadLocal`可以避免...

Global site tag (gtag.js) - Google Analytics