2011-01-12 69 views
0

我寫了一個C程序,它運行多個線程並使用MySQL。經過一些測試後,我反覆看到錯誤(間隔數小時)「Mysql服務器消失」,所以我最大化了mysql的wait_timeout設置。但是現在我收到錯誤「在查詢期間丟失了與MySQL服務器的連接」。這些錯誤只發生在我在多核處理器上運行程序時。在C中丟失連接mysql

也許你們知道最新錯誤或我必須做什麼來運行我的線程程序?

+0

沒有意義..當一個程序是多線程時,它是多線程的,這並不取決於你有多少CPU核心(當然,性能有差異,但這不是重點) 。給我們更多的信息,一些來源等。 – 2011-01-12 16:28:25

+0

我同意,我只是告訴我更改硬件時發生超時錯誤。我被告知問題在於mysql,我必須使用enable-multthreading或類似的東西來編譯我的程序。該代碼是一個簡單的數據庫連接與循環做一些查詢,之間有一段時間。 – Tim 2011-01-12 16:42:14

回答

1

如果您有一個多線程程序在1核系統和多核系統上運行不一致(適用於1核並且在多核上有錯誤),它寫入不正確:這肯定表示競爭條件。這意味着代碼實際上是不正確的,如果安排錯誤就會踐踏自己的數據,實際上在多核系統上實際發生這種情況,而不是在1核系統上。

實際上,同樣的問題也可能發生在1核心系統上,它只是不太可能和更罕見,因爲線程不能被真正同時調度,所以一個線程必須在錯誤的時間搶佔另一線程,讓你看到越野車的行爲。這就是爲什麼如果你編寫多線程代碼,你應該總是在多核主機上測試和調試它。你更有可能真正看到競賽狀況的證據;運行在1核心主機上,可以長時間保持隱藏狀態。

我不知道你在用什麼庫,但他們看起來不是線程安全的,或者你沒有以線程安全的方式使用它們。