Если у вас есть многопоточная программа, которая ведет себя по-разному в одноядерной системе и многоядерной системе (работает на 1-ядерном и имеет ошибки на многоядерности), она написана неправильно: это верный признак состояния гонки , Это означает, что код на самом деле неверен, и если запланированное неправильное будет попирать собственные данные, и это фактически происходит на практике в многоядерной системе, а не в одноядерной системе.
На самом деле, одна и та же проблема может возникнуть и в одноядерной системе, она менее вероятна и реже, потому что потоки не могут быть запланированы поистине одновременно, поэтому один поток должен вытеснить другого в самое неподходящее время , чтобы вы могли увидеть поведение багги. Вот почему, если вы пишете многопоточный код, вы всегда должны тестировать и отлаживать его на многоядерном узле. У вас гораздо больше шансов увидеть доказательства условий гонки; работающих на 1-ядерном хосте, они могут оставаться скрытыми гораздо дольше.
Я не знаю, какие библиотеки вы используете, но они не выглядят поточно-безопасными или вы не используете их в потокобезопасном режиме.
Не имеет смысла. Когда программа мутировалась, она многопоточна, это не зависит от того, сколько ядер у вас есть (есть различия в производительности, конечно, но здесь дело не в этом) , Дайте нам больше информации, некоторый источник и т. Д. –
Согласен, я только сказал, что ошибка таймаута возникла, когда я сменил оборудование. Моему сказали, что проблема связана с mysql, что я должен скомпилировать свою программу с помощью enable-multthreading или что-то в этом роде. Код простой db соединяется с циклом, который выполняет некоторые запросы, с некоторым промежутком времени. – Tim