Прежде всего, не все потоки заблокированы. Только те потоки, которые заблокированы, хотят войти в один и тот же критический раздел.
Ваш вопрос в том, что вы хотите проверить работу потоков.
Мое объяснение будет сфокусировано на использовании среды Visual Studio, как вы уже спрашивали о критическом разделе Windows.
Имейте глобальную переменную int loop = 1; Имейте критический раздел, который имеет только код while (loop); (бесконечный цикл)
Имеет по меньшей мере 2 потока в программе. Запустите код в отладчике. Смотрите вид потоков в среде IDE, и вы увидите, что один поток просто застревает во время (цикл).
Просто заморозить эту нить и переключиться на другую тему. Просто запустите другой поток, и вы увидите, что он не будет двигаться дальше, и он просто попытается войти в критический раздел.
Теперь измените значение цикла на 0 из вида просмотра отладчика. И все же ничего не изменится, поскольку первая нить, содержащая критический раздел, была заморожена. Теперь просто поставьте точку прерывания в строке while (loop) и запустите замороженный поток, тогда вы увидите, что, поскольку мы изменили значение цикла на 0, поток, который удерживал критический раздел, выйдет из критического раздела.
И ничего себе другой поток остановится в точке разрыва, и он теперь вошел в критический раздел.
Чтобы расширить область действия, добавьте 3 потока в свою программу, которая не использует критический раздел.
Запустите программу, и вы обнаружите, что приведенное выше верно только для потоков, имеющих критический раздел, но третий поток, который не использует критический раздел, просто запускается и завершается без каких-либо проблем.
Другие темы не могут одновременно вводить один и тот же CRITICAL_SECTION. Они не прекращают выполнение другого кода или вводят другие CRITICAL_SECTIONs –
Если он правильно используется, критический раздел блокирует другие потоки, если они попытаются войти в критический раздел, пока поток уже находится в этом разделе. Таким образом, вы можете иметь только один поток, выполняющий код между входом и выходом из критического раздела. ОС переключится на другой поток, который не заблокирован. – Phil1970
В редакции 17:09 UTC ссылка на карикатуру либо вводит в заблуждение, либо очень плохо сформулирована. Результат тот же, и я должен назвать это неправильным. – user4581301