C语言中的mysql断开连接

C语言中的mysql断开连接,mysql,c,multithreading,Mysql,C,Multithreading,我编写了一个运行多线程并使用MySQL的C程序。在一些测试之后,我反复看到错误(在“Mysql服务器消失”之间有几个小时),所以我最大化了Mysql的等待超时设置。但现在我得到了错误“在查询过程中与MySQL服务器失去连接”。这些错误仅在我在多核处理器上运行程序时发生 也许你们知道运行线程程序有什么问题或者我必须做什么?如果你有一个在单核系统和多核系统上表现不同的多线程程序(在单核系统上工作,在多核系统上有bug),那么它写得不正确:这肯定是竞争条件的标志。这意味着代码实际上是不正确的,如果调度

我编写了一个运行多线程并使用MySQL的C程序。在一些测试之后,我反复看到错误(在“Mysql服务器消失”之间有几个小时),所以我最大化了Mysql的等待超时设置。但现在我得到了错误“在查询过程中与MySQL服务器失去连接”。这些错误仅在我在多核处理器上运行程序时发生


也许你们知道运行线程程序有什么问题或者我必须做什么?

如果你有一个在单核系统和多核系统上表现不同的多线程程序(在单核系统上工作,在多核系统上有bug),那么它写得不正确:这肯定是竞争条件的标志。这意味着代码实际上是不正确的,如果调度错误,将破坏其自身的数据,这实际上发生在多核系统上,而不是单核系统上

事实上,同样的问题也可能发生在单核系统上,因为线程不能真正同时调度,所以一个线程必须在错误的时间抢占另一个线程,这样你才能看到错误的行为。这就是为什么在编写多线程代码时,应该始终在多核主机上对其进行测试和调试。你更有可能看到种族状况的证据;在单核主机上运行时,它们可以隐藏更长时间


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

没有意义。。当一个程序是多线程的时候,它是多线程的,这并不取决于你的CPU有多少核(当然性能上有差异,但这不是重点)。给我们更多的信息,一些来源等。我同意,我只告诉超时错误发生时,我改变了硬件。有人告诉我,问题出在mysql上,我必须用enable multthreading或类似的方法编译我的程序。这段代码是一个简单的db连接,其中有一个循环正在执行一些查询,在.thx之间有一段时间用于应答。这个问题似乎可以通过使用mysqlclient\r编译来解决。