我编写了一个运行多个线程并使用MySQL的C程序。经过一些测试后,我反复看到错误(两小时之间)“Mysql服务器消失了”,所以我最大化了mysql的wait_timeout设置。但现在我收到错误“在查询期间丢失了与MySQL服务器的连接”。这些错误仅在我在多核处理器上运行程序时发生。
也许你们知道什么是错的或者我必须做什么来运行我的线程程序?
答案 0 :(得分:1)
如果你有一个多线程程序,在1核系统和多核系统上运行不同(在1核上工作并且在多核上有错误),那么它写得不正确:这是竞争条件的确定标志。这意味着代码实际上是不正确的,如果调度错误将会践踏自己的数据,这实际上是在多核系统上实现的,而不是在单核系统上。
实际上,同样的问题也可能发生在1核系统上,它只是不太可能而且更罕见,因为线程无法真正同时调度,因此一个线程必须在错误的时间抢占另一个线程,你可以看到越野行为。这就是为什么如果你编写多线程代码,你应该总是在多核主机上测试和调试它。你更有可能真正看到竞争条件的证据;在单核主机上运行时,它们可以保持隐藏更长时间。
我不知道您正在使用哪些库,但它们看起来不是线程安全的,或者您没有以线程安全的方式使用它们。