2011-01-12 4 views
0

Я написал программу на языке C, которая запускает несколько потоков и использует MySQL. После некоторого тестирования я неоднократно видел ошибку (с часами между ними) «Сервер Mysql ушел», поэтому я максимизировал параметр wait_timeout mysql. Но теперь я получаю сообщение об ошибке «Потерянное соединение с сервером MySQL во время запроса». Эти ошибки возникали только при запуске программы на многоядерном процессоре.потерянное соединение mysql в C

Возможно, вы, ребята, знаете, что не так, или что мне нужно сделать, чтобы запустить мою программу с резьбой?

+0

Не имеет смысла. Когда программа мутировалась, она многопоточна, это не зависит от того, сколько ядер у вас есть (есть различия в производительности, конечно, но здесь дело не в этом) , Дайте нам больше информации, некоторый источник и т. Д. –

+0

Согласен, я только сказал, что ошибка таймаута возникла, когда я сменил оборудование. Моему сказали, что проблема связана с mysql, что я должен скомпилировать свою программу с помощью enable-multthreading или что-то в этом роде. Код простой db соединяется с циклом, который выполняет некоторые запросы, с некоторым промежутком времени. – Tim

ответ

1

Если у вас есть многопоточная программа, которая ведет себя по-разному в одноядерной системе и многоядерной системе (работает на 1-ядерном и имеет ошибки на многоядерности), она написана неправильно: это верный признак состояния гонки , Это означает, что код на самом деле неверен, и если запланированное неправильное будет попирать собственные данные, и это фактически происходит на практике в многоядерной системе, а не в одноядерной системе.

На самом деле, одна и та же проблема может возникнуть и в одноядерной системе, она менее вероятна и реже, потому что потоки не могут быть запланированы поистине одновременно, поэтому один поток должен вытеснить другого в самое неподходящее время , чтобы вы могли увидеть поведение багги. Вот почему, если вы пишете многопоточный код, вы всегда должны тестировать и отлаживать его на многоядерном узле. У вас гораздо больше шансов увидеть доказательства условий гонки; работающих на 1-ядерном хосте, они могут оставаться скрытыми гораздо дольше.

Я не знаю, какие библиотеки вы используете, но они не выглядят поточно-безопасными или вы не используете их в потокобезопасном режиме.

+0

THX для ответа. проблема, похоже, решена с компиляцией с помощью mysqlclient_r. – Tim

Смежные вопросы