• 我的腿腿
    2019-06-06
    我公司用的就是这个解决并发问题的,才知道是这种技术
     2
     7
  • M$画像
    2019-06-24
    希望王老师再出新品,一定支持。

    作者回复: 感谢捧场😄

    
     5
  • 添
    2019-08-19
    照着实现了一遍,确实可以巧妙。
    我觉得类STMTxn的get函数可以改进一下:现在get返回的值,只是最初始的值,如果当前事务更改了值,然后再调用get,最好可以返回最新的值;即当前事务的更改,对自己是可见的。
    ```
        @Override
        public <T> T get(TxnRef<T> ref) {
            if (!inTxnMap.containsKey(ref)) {
                inTxnMap.put(ref, ref.curRef);
            }

            if (writeMap.containsKey(ref)) {
                return (T) writeMap.get(ref);
            }
            else {
                return (T) inTxnMap.get(ref).value;
            }
        }
    ```
    展开
    
     2
  • helloworld
    2019-09-23
    按照老师自己实现的STM程序,根本不存在commit提交失败的时候吧?因为每一次的commit都是新创建一个STMTxn,新创建STMTxn后,inTxnMap和writeMap都是新的。不知道我考虑的对不对??

    作者回复: 不是这样的,不同的STMTxn持有的TxnRef是共享的,TxnRef内部有版本号,主要依赖这个版本号来检测冲突

    
     1
  • 小文同学
    2019-09-06
    谢谢老师推荐STM,我所在的游戏项目一直有对象异步入库的需求,为了使用异步入库,放弃了Spring针对数据库的事务。为此不得不编写大量代码去判断某个操作是否可以执行,希望软件事务内存可以为我的需求提供一个新的解决方案。最近几天开始研究相关源码了,希望可以较好的结合现有项目,有可以发布的成果一定在留言区为大家共享。

    作者回复: 👍期待你的成果!

    
     1
  • QQ怪
    2019-06-06
    哔,打卡,涨知识了
    
     1
  • 纷繁的烟火
    2020-01-14
    最后段代码的 构造参数里的txn在哪呀 找也找不到

    作者回复: atomic方法内传入的,lambda表达式可以找专门的资料看看

    
    
  • DFighting
    2019-10-16
    STM的优化有一点是针对大快照的优化吧,因为MySQL对数据库的快照并不是真正存储一份备份数据,类似例子中的map,而是利用version和undolog计算得到的,不然一个100G大小的数据库,每开启一个事物就拷贝一份数据,肯定是不现实的。
    
    
  • 悟空
    2019-07-09
    老师,private Map<TxnRef, VersionedRef> inTxnMap = new HashMap<>(); 这个是不是应该是静态的。在多个事物中共享,这样一个事物变更了,其他事物才能知晓
     1
    
  • Rancood
    2019-06-16
    感觉没有前面容易理解了
    
    
  • 有铭
    2019-06-06
    老师,关系数据库也是有死锁的,只是他们往往实现了死锁检测机制,死锁到一定时间就会强制解锁

    作者回复: 当然有死锁,但是数据库的目标是努力消除他们,有些是数据库的bug,有些是我们没有用好

    
    
  • 黄海峰
    2019-06-06
    代码里硬是没看到哪里修改了version。。

    作者回复: 只创建新的版本,永远不会去修改

    
    
  • 张三
    2019-06-06
    打卡!这篇高质量!
    
    
  • 爱吃回锅肉的瘦子
    2019-06-06
    涨见识了,谢谢老师。
    
    
我们在线,来聊聊吧