多线程事务可行吗?

2021 年 11 月 2 日
 kikione

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

有什么方案吗

3139 次点击
所在节点    程序员
15 条回复
justNoBody
2021 年 11 月 2 日
主线程等待子线程处理,然后根据线程返回信息已决定是否回滚事务,你看行不行
kikione
2021 年 11 月 2 日
@justNoBody 我觉得可行的
wolfie
2021 年 11 月 2 日
挺麻烦的。
A 等待 B 成功、则 A 执行,A 失败 B 还得回滚。
需要互相通知。
liuxu
2021 年 11 月 2 日
基于 CSP 模型做事务
kikione
2021 年 11 月 2 日
@wolfie 确实就是麻烦在这
GogoGo666
2021 年 11 月 2 日
@wolfie Golang 能解决,还很简单
0uyangtian
2021 年 11 月 2 日
golang 中的 errgroup 就很简单
wolfie
2021 年 11 月 2 日
@GogoGo666 #6
给个文章链接看一下
zjsxwc
2021 年 11 月 2 日
反正 redis 一个事务对象在多个 goroutine 中共用是不安全的,得加锁

https://github.com/go-redis/redis/issues/111
fkdtz
2021 年 11 月 2 日
相当于分布式事务的场景映射到单机多线程了,只是网络通信变成了线程间通信,可以参考分布式事务的做法。
fkdtz
2021 年 11 月 2 日
@fkdtz 好奇楼主这个做法是出于什么考虑,为何不把事务为放在同一个线程里执行?
haoliang
2021 年 11 月 2 日
第一时间想到 barrier
kikione
2021 年 11 月 2 日
@fkdtz 只是为了更快一点
0o0o0o0
2021 年 11 月 2 日
直接在主线程里面等待所有线程结束,之后判断是否全部执行成功,成功就全部提交,失败就全部回滚。不可以吗。。。
xuanbg
2021 年 11 月 3 日
@0o0o0o0 可以是可以的,但怎么回滚呢?怕是只能自己写回滚的代码,很麻烦。所以要么不要多线程,要么上分布式事务组件。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/812359

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX