OriginalGriff
Ах, нитки ... неужели они всегда одни и те же?
В идеальной ситуации каждое приложение всегда будет детерминированным: каждый раз, когда вы запускаете его, оно дает одни и те же результаты. Но мы живем в реальном мире, и наша ОС не делает то же самое каждый раз, когда ваше приложение запускается. Поэтому, когда вы начинаете многопоточность, вы должны понимать, что каждый поток независим, если вы специально не кодируете их для синхронизации (и это становится чрезвычайно сложным, если вы не очень, очень осторожны). Эта независимость означает, что ОС вольна запускать их так, как она считает нужным, и по мере того, как ядра в вашем процессоре становятся свободными или упреждающе освобождаются, чтобы позволить другим потокам работать.
Таким образом, в зависимости от того, как вы их закодировали - и это не похоже на то, что вы закодировали их как независимые единицы, они, похоже, обращаются к одним и тем же переменным, и это очень опасно - вы можете получить очень разные результаты на двух отдельных запусках. Без вашего кода мы не можем сказать, что может произойти в вашем конкретном случае, но имейте в виду, что когда вы пишете строку кода, независимо от того, насколько она проста, она выполняется не как единое целое, а как набор шагов, поэтому, если другой поток также обращается к тем же переменным, результаты могут стать очень непредсказуемыми, потому что они могут буквально изменять одну и ту же переменную одновременно!
Это не очень хорошая область для начинающих: вам нужно очень, очень тщательно подумать и спланировать потоковую обработку, прежде чем вы начнете кодировать, или вы можете попасть в ситуацию, когда один поток влияет на другой, и они оба не могут работать, пока другой не будет работать.