Регулярно я работаю с аварийными дампами или дампами памяти программ C ++ для Windows (эти программы являются многопоточными).
Такой дамп представляет собой картину того, как выглядят блоки памяти, связанные с приложениемв этот конкретный момент, но мне интересно, как это работает точно:
Давайте предположим, что у меня есть два потока, каждый из которых выполняет цикл от одного до десяти миллионов.Допустим, что в момент, когда я беру дамп, оба потока достигли определенного числа:
Thread A has reached number 12345.
Thread B also has reached number 12345.
Я беру дамп, используя диспетчер задач (щелкните правой кнопкой мыши «Создать файл дампа») илис помощью инструмента procdump.
Дамп записывается, но тем временем потоки продолжают свою работу (*).Сначала «dump-taker» получает дамп потока A, который достиг номера 12345, но к тому времени, когда «dump-taker» принимает дамп потока B, этот уже достиг номера 12399.
Это возможно?Если нет, то почему?Как я могу быть уверен, что состояние разных потоков принимается в один и тот же момент и что между ними нет задержки?
(*) Если вы скажете: " Нет, это не такправда: при получении дампа программа ставится на паузу", тогда у меня возникает вопрос:" Но как я могу быть уверен, что все потоки приостановлены одновременно? ".