首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单个连接上的多个数据库事务

问单个连接上的多个数据库事务
EN

Stack Overflow用户
提问于 2008-12-11 03:49:22
回答 5查看 3.8K关注 0票数 3

我有一个多线程程序,而每个线程在开始执行时都会从一个MySql连接池类获取一个连接。然后,该线程使用多个数据库表包装类,通过将其数据库连接传递给包装类来执行其业务逻辑。对这些包装器类的操作不一定是连续的,我希望这些包装器类能够使用单个数据库连接彼此独立地提交或回滚对其数据库表的更改。我知道MySql不允许嵌套事务,并且还没有想出一种方法来实现这一点。任何帮助都是非常感谢的。谢谢!

EN

回答 5

Stack Overflow用户

发布于 2008-12-11 04:26:17

听起来您必须更好地将事务与表包装器相关联,而不仅仅是基于线程。现在,你需要创建一个事务类。当事务打开和关闭时,transaction类从连接池获取/释放到连接池的连接。

然后,该事务成为您的表包装器的工厂。事务创建的任何表包装器都在事务内,因为除了事务所在的连接之外,它没有访问任何连接的权限。

这样做的恼人之处在于阻止所有对象访问死对象。当事务提交时,需要某种形式的SmartPtr来处理发生的事情,但是某些东西再次尝试使用表包装器。

票数 2
EN

Stack Overflow用户

发布于 2008-12-11 04:04:32

如果我理解正确的话,我相信您唯一的选择是实现某种类型的事务队列,允许您的多个线程共享单个连接。然后,每个线程都可以将需要在事务内执行的“任务”添加到队列中。然后,您有一个从队列中挑选这些任务的进程(您甚至可以在这里实现某种优先级),并在将结果返回给发起请求的线程之前将它们发送到数据库。调用线程将阻塞,直到它们收到结果,这并不理想,但如果您确实需要多个线程和多个事务,我看不到没有多个连接的其他方法。

票数 1
EN

Stack Overflow用户

发布于 2008-12-11 04:25:11

这是一个典型的多线程使用单个资源的例子。

解决方案就是在mysql连接操作上使用mutexes。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/358396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档