美文网首页
Java锁机制之CAS(一)

Java锁机制之CAS(一)

作者: 街角下的蚂蚁 | 来源:发表于2020-08-16 00:01 被阅读0次

导语

CAS 全称是 compare and swap,是一种用于在多线程环境下实现同步功能的机制。CAS 操作包含三个操作数:内存位置、预期数值和新值。CAS的实现逻辑是将内存位置处的数值与预期数值想比较,若相等,则将内存位置处的值替换为新值。若不相等,则不做任何操作。

简介

在 Java 中,Java 并没有直接实现 CAS,CAS 相关的实现是通过 C++ 内联汇编的形式实现的。Java 代码需通过 JNI 才能调用。接下来将会再介绍一点其他的背景知识。有这些背景知识,才能更好的理解后续的内容。

背景介绍

我们都知道,CPU 是通过总线和内存进行数据传输的。在多核心时代下,多个核心通过同一条总线和内存以及其他硬件进行通信。如下图:


计算机系统.jpg

图片出处:《深入理解计算机系统》

上图是一个较为简单的计算机结构图,虽然简单,但足以说明问题。在上图中,CPU 通过两个蓝色箭头标注的总线与内存进行通信。大家考虑一个问题,CPU 的多个核心同时对同一片内存进行操作,若不加以控制,会导致什么样的错误?

不过我们不用担心这个问题,在 Intel 处理器中,有两种方式保证处理器的某个核心独占某片内存区域。第一种方式是通过锁定总线,让某个核心独占使用总线,但这样代价太大。总线被锁定后,其他核心就不能访问内存了,可能会导致其他核心短时内停止工作。第二种方式是锁定缓存,若某处内存数据被缓存在处理器缓存中。处理器发出的 LOCK# 信号不会锁定总线,而是锁定缓存行对应的内存区域。其他处理器在这片内存区域锁定期间,无法对这片内存区域进行相关操作。相对于锁定总线,锁定缓存的代价明显比较小。

相关文章

  • [转]Java中的CAS操作以及锁机制详解

    原文: Dyson~ - Java中的CAS操作以及锁机制详解 1. 关于CAS操作 CAS:Compare An...

  • Java 并发编程—CAS 机制

    CAS 机制 什么 CAS ? 在 Java 中,锁分为两类,一种是悲观锁 Synchronized ,一种是乐观...

  • Java锁机制之CAS(一)

    导语 CAS 全称是 compare and swap,是一种用于在多线程环境下实现同步功能的机制。CAS 操作包...

  • java篇-CAS自旋

    我的博客java篇-CAS自旋 概述 CAS的全称是Compare And Swap 即比较交换,是一种乐观锁机制...

  • Java锁机制之CAS(二)

    导语 上一篇提到了在多核CPU环境下怎么实现CAS的原子性操作。本节将列举CAS在Java中的具体应用。 CAS实...

  • Java 什么是 CAS?

    Java 并发机制实现原子操作有两种: 一种是锁,一种是CAS。 CAS是Compare And Swap(比较并...

  • 6、多线程

    synchronized关键字与CAS机制 synchronized:悲观锁CAS 机制:乐观锁当程序的并发量比较...

  • Java 锁机制 - CAS 乐观锁

    学习完整课程请移步 互联网 Java 全栈工程师 CAS 是项乐观锁技术,当多个线程尝试使用 CAS 同时更新同一...

  • Java并发机制LongAdder解析

    基本原理和思想  Java有很多并发控制机制,比如说以AQS为基础的锁或者以CAS为原理的自旋锁。一般来说,CAS...

  • 并发系列(四)-----CAS

    一 简介 保证Java中的原子操做方式有两种方式1 加锁(可以理解悲观锁机制)2 CAS(可以理解为乐观锁机制)C...

网友评论

      本文标题:Java锁机制之CAS(一)

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