Это устарело, но, возможно, это еще может кому-нибудь помочь:
Не совсем понятно, что вы ожидаете получить, но помните:
Ваша переменная "i" может быть разделена между потоками. У вас есть условие гонки для содержимого "я". Один поток должен ждать другого, когда он хочет получить доступ к «я». Кроме того, один поток может изменить «i», а другой поток не примет это к сведению, что означает, что он выведет неправильное значение.
Endl () очищает память после окончания строки. Если вы используете \ n для перевода строки, эффект будет аналогичным, но без сброса. И std - это тоже объект, поэтому многопоточность борется за доступ к std. Когда память не очищается после каждого доступа, могут возникнуть помехи.
Чтобы убедиться, что они не связаны с вашими проблемами, вы можете объявить "i" как закрытое, чтобы каждый поток считал "i" сам. И вы можете поиграть с очисткой памяти на выходе, чтобы посмотреть, связано ли это с проблемой, с которой вы столкнулись.