MySQL:跨多个线程的事务

Zom*_*ies 8 mysql multithreading transactions

初步:

我有一个应用程序维护一个约100个线程的线程池.每个线程可以在新任务替换之前持续约1-30秒.当一个线程结束时,该线程几乎总是会导致将1-3条记录插入表中,所有线程都使用该表.目前,不存在任何事务支持,但我现在尝试添加它.此外,该表是InnoDB.所以...

目标

我想为此实现一个事务.此事务是否提交或回滚的规则驻留在主线程中.基本上有一个简单的函数将返回一个布尔值.

  1. 我可以跨多个连接实现事务吗?
  2. 如果没有,多个线程可以共享同一个连接吗?(注意:这里有很多插入,这是一个要求).

Kev*_*ell 5

1)不,事务仅限于单个数据库连接。

2)是的,可以在多个线程之间共享连接(和事务)。


Don*_*son 3

好吧,正如另一个答案中所述,您无法跨多个连接创建事务。并且您可以跨线程共享单个连接。但是,您需要非常小心。您需要确保只有一个线程同时写入连接。您不能只让多个线程通过同一连接进行通信,而不以某种方式同步它们的活动。如果您允许两个线程同时通信(客户端库中的内存损坏等),则可能会发生不好的事情。使用互斥体或关键部分来保护连接对话可能是可行的方法。

-大学教师