【问题标题】:lost connection mysql in C在C中丢失连接mysql
【发布时间】:2011-01-12 16:07:27
【问题描述】:

我编写了一个运行多个线程并使用 MySQL 的 C 程序。经过一些测试,我反复看到错误(间隔数小时)“Mysql 服务器消失了”,所以我最大化了 mysql 的 wait_timeout 设置。但现在我收到错误“在查询期间丢失与 MySQL 服务器的连接”。这些错误仅在我在多核处理器上运行程序时发生。

也许你们知道什么是错的或者我必须做什么来运行我的线程程序?

【问题讨论】:

  • 没有意义。。当一个程序是多线程时,它是多线程的,这不取决于你的CPU有多少核心(当然性能有差异,但这是不是这里的重点)。向我们提供更多信息、一些来源等。
  • 我同意,我只是告诉我更换硬件时发生了超时错误。有人告诉我,问题出在 mysql 上,我必须使用 enable-multthreading 或类似的东西来编译我的程序。该代码是一个简单的数据库连接,带有一个执行一些查询的循环,之间有一段时间。

标签: mysql c multithreading


【解决方案1】:

如果您的多线程程序在 1 核系统和多核系统上的行为不同(在 1 核上工作并且在多核上存在错误),则它的编写不正确:这是竞争条件的明确迹象。这意味着代码实际上是不正确的,如果调度错误将践踏自己的数据,这实际上是在多核系统上而不是在单核系统上发生的。

实际上,同样的问题也可能发生在 1 核系统上,只是不太可能而且更罕见,因为线程不能真正同时调度,所以一个线程必须在错误的时间抢占另一个线程,让您看到错误的行为。这就是为什么如果您正在编写多线程代码,您应该始终在多核主机上对其进行测试和调试。你更有可能真正看到竞争条件的证据;在单核主机上运行,​​它们可以保持隐藏更长时间。

我不知道您正在使用哪些库,但它们看起来不是线程安全的,或者您没有以线程安全的方式使用它们。

【讨论】:

  • 感谢您的回复。使用 mysqlclient_r 编译似乎可以解决问题。
猜你喜欢
  • 2016-08-04
  • 2020-09-21
  • 2018-07-15
  • 1970-01-01
  • 2019-12-31
  • 2021-12-16
  • 2018-02-25
  • 2020-09-02
  • 2018-09-17
相关资源
最近更新 更多