美文网首页
理解各种锁

理解各种锁

作者: 越过_1b61 | 来源:发表于2018-10-04 18:00 被阅读0次

1.首先是CAS(Compare-and-swap)

平台相关,它有三个操作数内存位置值V,旧值A,新值B。

CAS执行时,它检验如果值为A则用B更新V的值。多线程环境下有可能会产生ABA问题。

2.其次是乐观锁

乐观锁简而言之是在中字段上增加一个版本号,用来判断数据是否更新。

如:一个银行账户有$100,一开始的版本号为1.A从中取了$50,那么乐观锁机制会使当前版本为2,并且扣除$50,在A的操作过程中B来了,他要取$20,它读取版本号为1,当操作完了之后发现版本号为2,那么B的操作不执行。

3.最后是悲观锁

悲观锁一般是在数据库层加锁实现,应为如果在本系统下实现了悲观锁,那么不能保证外部系统的操作不会修改值。

一个典型的依赖数据库实现的悲观锁的例子:

select * from account where name="Erica" for update。在事务提交之前外部无法修改name='Erica'的值。

Hibernate的悲观锁也是这样实现的:String hqlStr = "from TUser as user where user.name='Erica'";

Query query = session.createQuery(hqlStr);

query.setLockMode("user",LockMode.UPGRADE); // 加锁

List userList = query.list();// 执行查询,获取数据

4.自旋锁和互斥锁

一般情况下,当线程获得不了锁,那么他会进入睡眠状态,这就是互斥锁。

而自旋锁是当获得不了锁的时候,会一直循环直到获得为止。

相关文章

  • 理解各种锁

    1.首先是CAS(Compare-and-swap) 平台相关,它有三个操作数内存位置值V,旧值A,新值B。 CA...

  • 深入理解各种锁

    1 临界区 1.1简介 在早期计算机系统中,只有一个任务进程在执行,并不存在资源的共享与竞争。随着技术和需求的飞速...

  • MySQL 各种锁理解总结

    该文章举例都是基于 InnoDB 可重复读(RR)隔离级别的,mysql 版本 8.0 根据加锁的范围,MySQL...

  • 14、各种锁的理解

    1、公平锁、非公平锁 公平锁:非常公平,不能插队,必须先来后到。 非公平锁:非常不公平,可以插队(synchron...

  • MySQL 中各种锁的理解

    我们在操作数据库的时候,可能会由于并发问题而引起的数据的不一致性(数据冲突) 乐观锁乐观锁不是数据库自带的,需要我...

  • Mysql中各种锁的理解

    一:引言--为什么mysql提供了锁 最近看到了mysql有行锁和表锁两个概念,越想越疑惑。为什么mysql要提供...

  • 各种锁🔒

    (1)互斥锁 a.每个对象都对应于一个可称为“互斥锁”的标记,这个标记用来保证在任一时刻,只能有一个线程访问该对象...

  • 2019-03-18文章精选

    1.深入理解 MySQL ——锁、事务与并发控制 各种锁、事务与并发,写得很详细。 2.剖析分布式锁 redis部...

  • iOS 各种锁

    概述 iOS多线程开发,会出现数据竞争,因此需要锁来保证线程安全。 线程安全 当一个线程访问资源时,需要保证其它的...

  • 各种锁概念

    公平锁 简单来讲,先到先得,类似队列。 非公平锁 简单来讲,先到不一定先得,因为他们是抢占式。如果抢占失败,再采用...

网友评论

      本文标题:理解各种锁

      本文链接:https://www.haomeiwen.com/subject/enuxaftx.html