2011-01-12 19 views
0

私は、複数のスレッドを実行し、MySQLを使用するCプログラムを作成しました。いくつかのテストの後、私は繰り返し "間違った時間を過ごした" "MySQLのサーバーがなくなった"というエラーを見たので、mysqlのwait_timeout設定を最大化しました。しかし、今私は "クエリ中にMySQLサーバーへの接続を失った"というエラーが表示されます。これらのエラーは、複数のコアプロセッサでプログラムを実行した場合にのみ発生します。Cの接続が失われた

多分あなたは何が間違っているのか、私はスレッドプログラムを実行するために何をしなければならないのか知っていますか?

+0

プログラムがマルチスレッド化されている場合、CPUのコア数に依存しません(パフォーマンスには違いがありますが、ここではあまり意味がありません) 。私たちに、より多くの情報、何らかの情報源などを与えてください。 –

+0

私は同意します、私はハードウェアを変更した時にタイムアウトエラーが発生したと言いました。私は問題がmysqlにあると言われました。プログラムをenable-multithreadingなどでコンパイルする必要があります。このコードは、ある程度の時間をかけて、いくつかのクエリを実行するループを持つ単純なdb接続です。返信の場合は – Tim

答えて

1

1コアシステムとマルチコアシステム(1コアで動作し、マルチコアでバグがある)で異なる動作をするマルチスレッドプログラムがある場合、それは間違って書かれています。 。コードが実際には間違っていることを意味し、間違ってスケジュールされた場合は、それ自体のデータを踏みにじることになります。実際には、実際には1コアシステムではなくマルチコアシステムで実際に起こっています。

実際には、1コアシステムでも同じ問題が発生する可能性があります。スレッドを本当に同時にスケジュールすることはできないため、まれにしか発生しません。したがって、一方のスレッドは、バグのある行動を見ることができます。このため、マルチスレッドコードを作成する場合は、常にマルチコアホスト上でテストしてデバッグする必要があります。競合状態の証拠を実際に見る可能性は非常に高いです。 1コアホスト上で動作しているため、ずっと長い間隠れている可能性があります。

使用しているライブラリはわかりませんが、スレッドセーフではないか、スレッドセーフな方法で使用していません。

+0

thxです。 この問題は、mysqlclient_rを使用してコンパイルすると解決されるようです。 – Tim

関連する問題