• 请不要在回答技术问题时复制粘贴 AI 生成的内容
kikione
V2EX  ›  程序员

多线程事务可行吗?

  •  
  •   kikione · Nov 2, 2021 · 3246 views
    This topic created in 1679 days ago, the information mentioned may be changed or developed.

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

    有什么方案吗

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

    https://github.com/go-redis/redis/issues/111
    fkdtz
        10
    fkdtz  
       Nov 2, 2021
    相当于分布式事务的场景映射到单机多线程了,只是网络通信变成了线程间通信,可以参考分布式事务的做法。
    fkdtz
        11
    fkdtz  
       Nov 2, 2021
    @fkdtz 好奇楼主这个做法是出于什么考虑,为何不把事务为放在同一个线程里执行?
    haoliang
        12
    haoliang  
       Nov 2, 2021
    第一时间想到 barrier
    kikione
        13
    kikione  
    OP
       Nov 2, 2021
    @fkdtz 只是为了更快一点
    0o0o0o0
        14
    0o0o0o0  
       Nov 2, 2021
    直接在主线程里面等待所有线程结束,之后判断是否全部执行成功,成功就全部提交,失败就全部回滚。不可以吗。。。
    xuanbg
        15
    xuanbg  
       Nov 3, 2021
    @0o0o0o0 可以是可以的,但怎么回滚呢?怕是只能自己写回滚的代码,很麻烦。所以要么不要多线程,要么上分布式事务组件。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   6169 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 62ms · UTC 03:02 · PVG 11:02 · LAX 20:02 · JFK 23:02
    ♥ Do have faith in what you're doing.