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

多线程事务可行吗?

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

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

    有什么方案吗

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

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