потерял связь с MySQL в C

0

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

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

  • 0
    Не имеет смысла .. Когда программа многопоточная, она многопоточная, это не зависит от того, сколько ядер у вашего процессора (конечно, есть различия в производительности, но здесь дело не в этом). Дайте нам больше информации, источник и т. Д.
  • 0
    Я согласен, я только сказал, что ошибка тайм-аута произошла, когда я изменил оборудование. Моему сказали, что проблема в mysql, что мне нужно скомпилировать мою программу с поддержкой многопоточности или что-то в этом роде. Код представляет собой простое соединение БД с циклом, выполняющим некоторые запросы с некоторым промежутком времени.
Теги:
multithreading

1 ответ

1

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

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

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

  • 0
    спасибо за ответ. похоже, проблема решена компиляцией с помощью mysqlclient_r.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню