zoukankan      html  css  js  c++  java
  • 第十五章 原子变量和非阻塞同步机制

    1.非阻塞算法

      如果在算法中,一个线程的失败或挂起不会导致其他线程也失败或挂起,那么这种算法就称为非阻塞算法。如果这种算法的每个步骤中都存在某个线程能够执行下去,那么这种算法也称为无锁算法。

    这种算法利用底层的原子机器指令代替锁来确保数据在并发访问中的一致性。

    2.硬件对并发的支持

      2.1 CAS(Compare-and-Swap)

        包含3个操作数——需要读写的内存位置、进行比较的值A和拟写入的新值B。当且仅当V的值等于A时,CAS才会通过原子的方式用新值B更新V的值。无论位置V的值是否等于A,都将返回V原有的值。

      当多个线程尝试使用CAS同时更新一个变量时,只有其中一个线程能更新变量的值,其他线程都会失败,然而,失败的线程不会挂起。由于一个线程在竞争CAS时失败不会阻塞,因此它可以决定是否重新尝试,或执行一些恢复操作。

      2.2 ABA问题

        解决方法:每次更新V的值和版本号。

    3.原子变量类

      原子变量类相当于一种泛化的volatile变量,能够支持原子的和有条件的读-改-写操作。比锁的粒度更细,量级更轻。原子变量将发生竞争的范围缩小到单个变量上。

      

    人生就像蒲公英,看似自由,其实身不由己。
  • 相关阅读:
    纯文本人工智能的实现
    纯文本人工智能
    纯文本人工智能之句子如何分词
    纯文本人工智能之名词信息提取及存储
    跪求AI编程语言纯中文代码
    人工智能最重要的逻辑的实现
    启示录+!!建立智力库
    嫦娥共舞
    为什么有才华的人常失败
    长城登高望远
  • 原文地址:https://www.cnblogs.com/walker993/p/9296501.html
Copyright © 2011-2022 走看看