多线程事务可行吗?

2021-11-02 10:20:02 +08:00
 kikione

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

有什么方案吗

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

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

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

https://www.v2ex.com/t/812359

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

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

© 2021 V2EX