Извините, просто что-то пошло не так в кеше. Просто аннулируйте кеш и перезапустите, и тогда он будет работать нормально. Проблема в том, что я до сих пор не знаю, почему это не удалось с самого начала.
Просто мое понимание этих понятий:
Критический раздел - как вы сказали.
Критический region - Это похоже на широкоформатную версию «не позволяйте исключениям выходить из потока».
Область ограниченного выполнения - это способ сделать фрагмент кода более или менее атомарным, защищая от прерываний исключениями. Пример на этой странице использует его, чтобы удостовериться, что выделение и сохранение дескриптора выполняются. Обратите внимание, что отката нет, это скорее превентивная система.
Существуют рекомендации для «нормального программирования», которые выглядят примерно так: при переопределении Equals или неявного оператора вы не должны бросать (что-либо).
В соответствии с параллельным программированием в Windows Джо Даффи определения для критического раздела / области следующие:
Критический section : В Win32 критическая секция представляет собой простую структуру данных ( CRITICAL_SECTION
), используемую для построения критических областей.
Критическая область : это кодовая область, которая имеет взаимное исключение (это, по-видимому, то, что вы называете критической секцией в приведенном выше).
В Windows я до сих пор работал только с критическим разделом . По моему опыту, это механизм блокировки потоков в пользовательском пространстве Win32. Это означает, что его можно использовать в одном процессе для блокировки ресурсов, совместно используемых несколькими потоками. Это не для всей системы, а только для всего процесса. Примером того, чем он не является, является блокировка пространства ядра (например, мьютексы).
Например, boost :: thread использует критические разделы в своей реализации Win32 - или, по крайней мере, когда я его использовал - и использует мьютексы в Linux через pthreads.
Любой участок кода, который должен завершаться каждым процессом, который его запускает, прежде чем другой процесс сможет войти в него, называется критической областью.