`
Alrale
  • 浏览: 61868 次
  • 来自: fantasy
社区版块
存档分类
最新评论

【转载】cpu 硬件同步原语(compare and swap)

    博客分类:
  • Java
 
阅读更多
cpu 硬件同步原语(compare and swap)

支持并发的第一个处理器提供原子的测试并设置操作,通常在单位上运行这项操作。现在的处理器(包括 Intel 和 Sparc 处理器)使用的最通用的方法是实现名为 比较并转换或 CAS 的原语。(在 Intel 处理器中,比较并交换通过指令的 cmpxchg 系列实现。PowerPC 处理器有一对名为“加载并保留”和“条件存储”的指令,它们实现相同的目地;MIPS 与 PowerPC 处理器相似,除了第一个指令称为“加载链接”。)


  CAS 操作包含三个操作数 —— 内存位置(V)、预期原值(A)和新值(B)。如果内存位置的值与预期原值相匹配,那么处理器会自动将该位置值更新为新值。否则,处理器不做任何操作。无论哪种情况,它都会在 CAS 指令之前返回该位置的值。(在 CAS 的一些特殊情况下将仅返回 CAS 是否成功,而不提取当前值。)CAS 有效地说明了“我认为位置 V 应该包含值 A;如果包含该值,则将 B 放到这个位置;否则,不要更改该位置,只告诉我这个位置现在的值即可。”


  通常将 CAS 用于同步的方式是从地址 V 读取值 A,执行多步计算来获得新值 B,然后使用 CAS 将 V 的值从 A 改为 B。如果 V 处的值尚未同时更改,则 CAS 操作成功。


  类似于 CAS 的指令允许算法执行读-修改-写操作,而无需害怕其他线程同时修改变量,因为如果其他线程修改变量,那么 CAS 会检测它(并失败),算法可以对该操作重新计算。清单 3 说明了 CAS 操作的行为(而不是性能特征),但是 CAS 的价值是它可以在硬件中实现,并且是极轻量级的(在大多数处理器中)。
分享到:
评论

相关推荐

    java面试题_多线程(68题).pdf

    4. **CAS(Compare and Swap)**:CAS是一种无锁同步原语,它利用硬件提供的原子操作(如CPU的cmpxchg指令),在不使用锁的情况下实现并发操作。Java并发库中的`java.util.concurrent.atomic`包中的原子类如...

    Thread基础知识点笔记总结

    CAS 是一种基于硬件级别的指令实现的同步原语,用于.compareAndSwap,是 Java 并发包 java.utile.concurrent 中许多同步类的基础。CAS 的工作原理是首先检查要操作的变量是否是期望的值,如果是,则进行操作,否则不...

    硬件锁实现多生产者多消费者链表

    硬件锁通常指的是CPU提供的原子操作,如测试并设置(Test-and-Set)、交换(Compare-and-Swap, CAS)等指令,它们能够在不引入操作系统开销的情况下实现线程间的同步。 硬件锁,如CAS操作,是无锁编程(Lock-Free ...

    cvmx-spinlock.rar_V2

    在Octeon处理器上,CVMX Spinlock可能利用了其特有的硬件指令,如无等待状态的读写操作,以及硬件支持的原子操作,如比较并交换(Compare and Swap, CAS)指令,以提高锁操作的性能。这些优化使得在多核环境下的同步...

    基于cas的无锁队列实现

    它利用了硬件原子操作,如Compare and Swap (CAS)指令,来避免在更新数据时出现锁竞争,从而提高系统的并行性能。在这个场景中,我们将深入探讨如何在C++中基于CAS实现一个无锁队列,并分析其背后的并发原理。 ### ...

    聊聊Java和CPU的关系

    例如,`AtomicInteger`类的实现中,内部使用了`Unsafe`类,通过CPU的原子操作(如CAS,Compare and Swap)保证数据更新的原子性和可见性,从而避免了锁带来的性能开销。 再者,CPU的缓存层次结构对Java程序性能有...

    atomicops_internals_x86_gcc.rar_This Is It

    在x86架构下,CPU提供了多种原语来支持原子操作,例如锁前缀指令(LOCK prefix)、比较并交换(Compare-and-Swap, CAS)、无锁(Lock-Free)编程等。这些原语使得程序员能够在不引入锁的情况下实现线程间的同步。 ...

    骐哥在学习深入立即计算机系统时候用的 caspp.h caspp.c

    并发原语如比较并交换(Compare and Swap,CAS)操作是多线程编程中的一种常见技术,用于无锁编程或者构建锁等同步机制。 `caspp.c` 文件是C语言的源代码文件,它会包含实际的函数实现,这些函数可能使用了`caspp.h...

    Java并发编程全景图.pdf

    CAS(Compare-And-Swap)是一种无锁的同步机制,用于实现非阻塞的原子操作。 2. Java内存模型 Java内存模型定义了共享变量的读写规则,以及线程间通信的方式。它通过Happens-Before规则和as-if-serial语义来确保多...

    ioking真正无锁的服务器引擎之消息引擎模块(nolock)

    CAS(Compare and Swap)是实现无锁算法的一种常见原语,它允许原子地比较并更新内存位置的值。然而,CAS操作在高并发下可能会导致自旋锁,消耗大量的CPU资源。ioking消息引擎模块摒弃了CAS,通过其他机制确保数据...

    Java面试题并发部分.docx

    8. **CAS(Compare and Swap)**:CAS是一个无锁同步原语,它比较内存中的值与期望值,如果相等则更新为新的值。CAS能减少线程切换开销,但存在ABA问题,即在A->B->A的过程中,可能会被其他线程误判。解决ABA问题...

    多线程 教程

    本教程将深入探讨多线程的原理和应用,涵盖各种同步机制,如锁、CAS(Compare and Swap)、临界区、信号量、事件以及互斥锁,并简要介绍队列在多线程中的作用。 1. **多线程基础**:多线程允许一个程序同时执行多个...

    lockfree c#.net

    这个库提供了一组高效且线程安全的数据结构,它们在设计上不依赖于.NET框架中的 Monitor 或 Mutex 等同步原语,而是利用了.NET的原子操作(如Interlocked类的函数)和无锁算法(如CAS,Compare And Swap)来实现并发...

    Disruptor进阶.docx

    Disruptor摒弃了传统的锁机制,转而采用CPU级别的Compare and Swap (CAS)原语。CAS操作在硬件级别执行,不需要操作系统介入,因此避免了内核态切换和上下文切换,从而减少了开销。尽管这使得Disruptor的实现更为...

    AtomicInteger 浅谈

    它通过CAS(Compare and Swap,比较并交换)算法来保证原子性。CAS操作包含三个参数:内存地址V、预期值A和新值B。如果内存地址V的值等于预期值A,则将内存地址V的值更新为B;否则,不做任何操作。这个过程在硬件...

    无锁编程之自旋锁的C++实现

    通过原子操作(如CAS - Compare and Swap)来确保数据的一致性,从而避免了线程间的竞争条件和死锁问题。 自旋锁(Spinlock)是一种简单的无锁机制。当一个线程试图获取已被其他线程持有的锁时,它会进入自旋状态,...

    并发编程demo测试包含线程池、锁、队列、信号、cas等等

    本测试DEMO涵盖了并发编程的关键组件,包括线程池、锁、队列、信号以及CAS(Compare-and-Swap)操作。下面我们将逐一深入探讨这些知识点。 首先,线程池是管理线程的一种机制,它避免了频繁创建和销毁线程带来的...

    Disruptor demo

    它使用CAS(Compare and Swap)原语保证并发操作的正确性,这是现代处理器硬件支持的高效原子操作。 通过这个"Disruptor demo",你可以学习到如何在实际项目中应用Disruptor来优化并发性能,以及如何配置和调整各种...

    今天会是有Offer的一天么:面试时不要再问我CAS和Synchronized的区别了

    1. **什么是synchronized**:synchronized是Java内置的同步原语,它提供了一种互斥访问机制,确保同一时刻只有一个线程能访问特定的代码块。 2. **锁的类型**:synchronized可以作用于方法和代码块,对于普通方法,...

Global site tag (gtag.js) - Google Analytics