V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
kikione
V2EX  ›  程序员

多线程事务可行吗?

  •  
  •   kikione · 2021-11-02 10:20:02 +08:00 · 2473 次点击
    这是一个创建于 1146 天前的主题,其中的信息可能已经有所发展或是发生改变。

    A 线程异常,事务回滚, B 线程,也要回滚。

    有什么方案吗

    15 条回复    2021-11-03 07:27:22 +08:00
    justNoBody
        1
    justNoBody  
       2021-11-02 10:27:42 +08:00
    主线程等待子线程处理,然后根据线程返回信息已决定是否回滚事务,你看行不行
    kikione
        2
    kikione  
    OP
       2021-11-02 10:30:25 +08:00
    @justNoBody 我觉得可行的
    wolfie
        3
    wolfie  
       2021-11-02 10:34:01 +08:00
    挺麻烦的。
    A 等待 B 成功、则 A 执行,A 失败 B 还得回滚。
    需要互相通知。
    liuxu
        4
    liuxu  
       2021-11-02 10:39:20 +08:00
    基于 CSP 模型做事务
    kikione
        5
    kikione  
    OP
       2021-11-02 10:40:37 +08:00
    @wolfie 确实就是麻烦在这
    GogoGo666
        6
    GogoGo666  
       2021-11-02 10:51:33 +08:00
    @wolfie Golang 能解决,还很简单
    0uyangtian
        7
    0uyangtian  
       2021-11-02 10:53:34 +08:00
    golang 中的 errgroup 就很简单
    wolfie
        8
    wolfie  
       2021-11-02 10:54:47 +08:00
    @GogoGo666 #6
    给个文章链接看一下
    zjsxwc
        9
    zjsxwc  
       2021-11-02 11:09:22 +08:00
    反正 redis 一个事务对象在多个 goroutine 中共用是不安全的,得加锁

    https://github.com/go-redis/redis/issues/111
    fkdtz
        10
    fkdtz  
       2021-11-02 14:31:29 +08:00
    相当于分布式事务的场景映射到单机多线程了,只是网络通信变成了线程间通信,可以参考分布式事务的做法。
    fkdtz
        11
    fkdtz  
       2021-11-02 14:36:59 +08:00
    @fkdtz 好奇楼主这个做法是出于什么考虑,为何不把事务为放在同一个线程里执行?
    haoliang
        12
    haoliang  
       2021-11-02 15:26:44 +08:00
    第一时间想到 barrier
    kikione
        13
    kikione  
    OP
       2021-11-02 15:37:12 +08:00
    @fkdtz 只是为了更快一点
    0o0o0o0
        14
    0o0o0o0  
       2021-11-02 16:22:55 +08:00
    直接在主线程里面等待所有线程结束,之后判断是否全部执行成功,成功就全部提交,失败就全部回滚。不可以吗。。。
    xuanbg
        15
    xuanbg  
       2021-11-03 07:27:22 +08:00
    @0o0o0o0 可以是可以的,但怎么回滚呢?怕是只能自己写回滚的代码,很麻烦。所以要么不要多线程,要么上分布式事务组件。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3242 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 00:47 · PVG 08:47 · LAX 16:47 · JFK 19:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.