• 微微一笑
    2019-09-03
    老师好,实现了下CAS,代码连接:https://github.com/shenyachen/JKSJ/blob/master/study/src/main/java/com/jksj/study/casAndFaa/CASThread.java。
    对于FAA,通过查找资料,jdk1.8在调用sun.misc.Unsafe#getAndAddInt方法时,会根据系统底层是否支持FAA,来决定是使用FAA还是CAS。

    作者回复: 👍👍👍

    
     8
  • 一步
    2019-09-03
    NodeJS中,没有发现有关操作CpU原语CAS或者FAA的实现的

    作者回复: 可以试试这个:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Atomics

     1
     5
  • 姜戈
    2019-09-03
    JAVA中的FAA和CAS: FAA就是用CAS实现的。

    public final int getAndAddInt(Object var1, long var2, int var4) {
            int var5;
            do {
                var5 = this.getIntVolatile(var1, var2);
            } while(!this.compareAndSwapInt(var1, var2, var5, var5 + var4));

            return var5;
        }
    展开
    
     4
  • QQ怪
    2019-09-03
    MutxLock:https://github.com/xqq1994/algorithm/blob/master/src/main/java/com/test/concurrency/MutxLock.java
    CAS、FFA:
    https://github.com/xqq1994/algorithm/blob/master/src/main/java/com/test/concurrency/CAS.java
    完成了老师的作业,好高兴

    作者回复: 👍👍👍

    
     2
  • 明日
    2019-09-03
    Java实现: https://gist.github.com/imgaoxin/a2b09715af99b993e30b44963cebc530

    作者回复: transfer2要放在循环中,否则有可能转账失败。
    另外,transfer1中,虽然一个简单的加法不会引起任何异常,但总是把unlock放到finnally中是一个好习惯。

    
     2
  • leslie
    2019-09-03
    打卡:老师一步步剥离一层层拨开实质-又涨知识了,期待老师的下节课。
    
     2
  • 张三
    2019-09-03
    复习了一下Java中的原子类,对应到go里边的CAS实现中的for循环是自旋,还有就是要注意ABA问题吧。
    
     2
  • Switch
    2019-10-25
    java实现, 锁、Unsafe类、AtomicInteger类

    https://github.com/Switch-vov/mq-learing/tree/master/src/main/java/com/switchvov/transfer
    
     1
  • 达文西
    2019-10-10
    cas需要注意 aba 问题吧
    
     1
  • 顶新
    2019-09-23
    .net 实现代码:
    lock 实现:
    static void transfer(object amount)
            {
                lock (obj)
                {
                    balance = balance + Convert.ToInt32(amount);
                }
            }
    cas 实现:
    static void transfer_cas(object amount)
            {
                int initialValue, computedValue;
                do
                {
                    initialValue = balance;
                    computedValue = initialValue + Convert.ToInt32(amount);
                } while (initialValue != Interlocked.CompareExchange(
                    ref balance, computedValue, initialValue));
            }

    faa 实现:
    static void transfer_faa(object amount){
                Interlocked.Add(ref balance,Convert.ToInt32(amount));
            }
    展开
    
     1
  • 张三
    2019-09-03
    Java里边有支持FAA这种CPU指令的实现吗?以前没听说

    作者回复: 在java中,可以看一下java.util.concurrent.atomic.AtomicLong#getAndAdd

     1
     1
  • Sicily9
    2019-11-19
    有一个小疑问,关于原子性的话,有一个极端情况,多核并行情况下 两个线程 同时在执行一个cas原语 会有安全问题吗

    作者回复: 不会的,可以放心使用。

     1
    
  • PeterLu
    2019-10-30
    交作业:https://github.com/PeterLu798/MQ/tree/master/src/com/lbj/mq/lock
    LockBalance.java使用Java独占锁实现,平均耗时 300毫秒左右
    CASBalance.java使用AtomicInteger实现,平均耗时250毫秒左右
    
    
  • 长期规划
    2019-10-09
    Python没找到CAS和FAA的实现

    作者回复: CPython(就是我们最常用的Python)中确实没有提供原子操作。可以看一下pypy:https://pypy.org/

    
    
  • godtrue
    2019-09-24
    之前只知CAS,还有FAA,想必应该有一坨类似的原语。打卡,感谢,又增长了一点见识。
    
    
  • 王莹
    2019-09-09
    代码工程
    https://github.com/dlutsniper/wy-ja-lock/tree/master/src/main/java/wy/ja/lock/demo
    试验耗时的环节,深刻体会JIT的强大,执行次数越多,耗时均值越低
    JIT吗?执行越多速度越快?
    关闭JIT -Xint / -Djava.compiler=NONE
    AccountDemoSynchronized 100次关闭前后
      开启 16.66ms 13.77ms 11.26ms
      关闭 93.14ms 102.12ms 81.13ms
    AccountDemoCas 100次关闭前后
      开启 12.74ms 10.5ms 12.42ms
      关闭 82.48ms 74.7ms 77.09ms
    展开
    
    
  • 青舟
    2019-09-04
    https://github.com/qingzhou413/geektime-mq.git
    做了1000万次加法,
    Lock: 380ms
    CAS: 200ms
    FAA: 280ms

    作者回复: java里面有AtomicInteger等等封装好的类,包含了CAS和FAA等原子操作,可以直接使用的。

     1
    
  • Randy Liu
    2019-09-04
    用户硬件同步原语来代替锁的效果,确实是一个好思路
    
    
  • 许童童
    2019-09-03
    老师讲得很好,对于我这种基础薄弱的,长见识了,感谢老师。
    
    
  • 潘政宇
    2019-09-03
    go的语法太奇特了,代码中的done作用是什么啊

    作者回复: 可以参考一下:https://blog.golang.org/pipelines

    
    
我们在线,来聊聊吧