Я написал программу на C, которая запускает несколько потоков и использует MySQL. После некоторого тестирования я неоднократно видел ошибку (с часами между ними) "Сервер Mysql ушел", поэтому я максимизировал параметр wait_timeout mysql. Но теперь я получаю сообщение об ошибке "Потерянное соединение с сервером MySQL во время запроса". Эти ошибки возникали только при запуске программы на многоядерном процессоре.
Возможно, вы, ребята, знаете, что не так, или что мне нужно сделать, чтобы запустить мою программу с резьбой?
Если у вас есть многопоточная программа, которая ведет себя по-разному в одноядерной системе и многоядерной системе (работает на 1-ядерном и имеет ошибки на многоядерности), она написана неправильно: это верный признак состояния гонки. Это означает, что код на самом деле неверен, и если по расписанию просто неправильно будет попирать собственные данные, и это фактически происходит на практике в многоядерной системе, а не в одноядерной системе.
На самом деле, одна и та же проблема может возникнуть и в 1-ядерной системе, она менее вероятна и реже, потому что потоки не могут быть запланированы поистине одновременно, поэтому один поток должен вытеснить другого в самое неподходящее время, для вас, чтобы увидеть поведение багги. Вот почему, если вы пишете многопоточный код, вы всегда должны тестировать и отлаживать его на многоядерном узле. У вас гораздо больше шансов увидеть доказательства условий гонки; работающих на 1-ядерном хосте, они могут оставаться скрытыми гораздо дольше.
Я не знаю, какие библиотеки вы используете, но они не выглядят поточно-безопасными или вы не используете их в потоковом режиме.