zoukankan      html  css  js  c++  java
  • CAS机制

    Compare And Save 比较并存储

    简单说就是比较原始值与预期目标值是否相等,若想等就存储;不等就重新计算再次比较(自旋),重复这个操作

    举例 B=A+1

    addrA:存储A值的内存地址

    addrB:存储B值的内存地址

    (1)首先是从addrA取出A值

    (2)计算A+1

      (3) 将A+1的结果存到addrB

    正常流程如(1)(2)(3),但若是在(3)之前有另外一个线程将A的值修改为A1,然后再执行(3),那么我们得到的就是一个旧的B值(也是一个错误的B值);

    为了解决这种情况,在执行(3)之前,去比较A与adrrA的值是否相等,若相等就执行(3),不等就重新从(1)开始(称为自旋),这就是CAS机制。

    synchronized比较

    (1)synchronized是将整个程序块锁死,其他线程无法使用,直到当前线程执行完毕;

    CAS机制运行其他线程同时使用这段内存,自己不断轮询来确保操作正确性;

    (2)synchronized会带来性能问题,一般情况下CAS机制性能影响较小

       (3) synchronized预想并发情况严重,需要将程序块锁死来确保同步,这就是悲观锁的思想

      CAS机制认为并发情况没那么严重,只要自己不断自旋轮询来执行操作,这是乐观锁的思想

  • 相关阅读:
    luarocks argparse
    Shell中for循环的几个常用写法
    linux
    Docker修改镜像源为阿里云
    ntpdate更新服务器时间失败
    linux文本三剑客之 sed
    [Union]C++中Union学习笔记
    [sublime] 利用sublime搭建C/C++编译器
    [wordpress]WordPress地址(URL)错误,修改解决方案
    [wordpress]更新插件时,免去FTP操作
  • 原文地址:https://www.cnblogs.com/ming-szu/p/9070364.html
Copyright © 2011-2022 走看看