Разница между "Критической секцией", "Критическим регионом" и "Областью с ограниченным исполнением"

Являются ли эти три разных понятия или я становлюсь беспорядочным? (Я читал статьи о сборке резьбы и сборке мусора вместе и смутил себя.)

"Критический раздел" . Я думаю, что это может быть просто термин для разделов кода, в котором вы не хотите одновременно обращаться к нескольким потокам, то есть внутри блокировки и операторов Monitor.Enter/Exit

"Критическая область" . Здесь нет реальной подсказки. MSDN говорит что-то вроде строк "Это говорит хозяину, что исключения, которые были выбраны в этом разделе, могут иметь более широкий эффект". И что "хосты CLR, например Sql Server" могут выбирать обработку исключений, которые были выбраны в критических областях "по-разному". Иными словами, как? И почему? И, что наиболее важно, в каких сценариях реального мира мне может понадобиться отметить код как критический регион?

"Ограниченный регион выполнения" . Я столкнулся с этим, когда читал о CriticalFinalizerObject в статье коллекции мусора.

Все, что я могу понять из MSDN на этом, - это то, что код в одном из этих регионов каким-то образом гарантированно работает (но как?) и поэтому не должен бросать исключения вне диапазона.

Что такое out-of-band exception? (Я сделал это Google, но он просто спросил меня, имею ли я в виду "исключение из-за пределов" ).

Это любое необработанное исключение? Или только определенные типы исключений? И еще раз, самое главное, в каких сценариях реального мира мне может понадобиться "ограниченная область выполнения"?

Как я не совсем понимаю понятия, я не уверен, какие теги этот вопрос нуждается, кроме ".NET".

Ответы

Ответ 1

Просто мое понимание этих понятий:

Критический раздел - как вы сказали.

Критическая область. Это кажется большой картиной версии "не позволяйте исключениям выходить из потока".

Ограниченный регион выполнения. Это способ сделать кусок кода более или менее атомарным, защищая от прерывания исключениями. Пример на этой странице использует его, чтобы обеспечить выполнение распределения и хранения дескриптора. Обратите внимание, что нет отката, это скорее профилактическая система.

Существуют рекомендации для "нормального программирования", которые выглядят немного как это, т.е. при переопределении Equals или неявного оператора вы не должны бросать (что-либо).

Ответ 2

В соответствии с параллельным программированием в Windows Джо Даффи определения для критического раздела/области следующие:

Критический раздел. В критическом разделе Win32 представлена ​​простая структура данных (CRITICAL_SECTION), используемая для создания критических областей.

Критическая область:. Это код региона, который имеет взаимное исключение (это, кажется, что вы имеете в виду в качестве критической секции в указанной выше)

Ответ 4

Критическая секция Набор инструкций, некоторые из которых обеспечивают доступ к общим объектам.

Игнорировать на тот момент, что оба ProcessA и ProcessB могут выполняться одновременно. Вы не хотели бы зависеть от значения x, если либо ProcessA, либо ProcessB должны выполняться одновременно многими разными потоками, поскольку это, скорее всего, приведет к состоянию гонки.

В этом примере два цикла while являются критическими разделами.

int x = 0;
Process A() {
    while(true) {
        x++;
        x--;
    }
}
Process B() {
    while(true) {
        x++;
        x--;
    }
}

Критический регион Набор критических разделов.

Теперь предположим, что вы можете одновременно выполнять ProcessA и ProcessB. Каждый процесс имеет критический раздел. Оба раздела имеют одну и ту же переменную (x). Вместе две критические секции образуют критический регион. Почему это важно? Если вы предполагаете, что критический раздел ProcessA защищен взаимным исключением, вы все равно получите неверные результаты в x, поскольку ProcessB не соблюдает взаимное исключение. Вам необходимо внедрить взаимное исключение в критический регион, внедряя его на каждом критическом участке, который составляет регион.

Ответ 5

В Windows я работал только с Critical Section. По моему опыту это механизм блокировки потоков пользовательской среды Win32. Это означает, что он может использоваться в одном процессе для блокировки ресурсов, разделяемых несколькими потоками. Это не относится к общесистемной, только общесистемной. Примером того, что это не так, является блокировка ядра (например, мьютексы).

Например, boost:: thread использует критические разделы в своей реализации Win32 - или, по крайней мере, это сделал, когда я его использовал, - и использует мьютексы в Linux через pthreads.

Ответ 6

Любой раздел кода, который должен быть завершен каждым процессом, который начинает его до того, как другой процесс может войти в него, называется критическим регионом.

Ответ 7

Критический раздел: это код кода. Каждый процесс имеет критический раздел, в котором обмениваются переменные comon, обновляется таблица, записывается файл и... Важная особенность заключается в том, что, когда один процесс выполняется в критическом разделе, ни один другой процесс не может войти в свой критический раздел и предоставляет руководство исключение. Разумеется, для этого используется инструмент синхронизации, называемый "семафор", когда происходит процесс arw 'n'. Семафор - целочисленный varaible.

Критическая область: это конструкция синхронизации, которая защищает от некоторых простых ошибок, связанных с решением семафора, с проблемой критического сечения, которая может быть выполнена программистом.

Ответ 8

Microsoft может определять вещи по-разному, но в целом критическая область и критическая секция - это одно и то же.

Они используются для описания регионов, где два или более процессов (или потоков) доступа к той же разделяемой памяти, а не к координате они приведут к условиям гонки, которые предотвращают желаемое поведение при исполнении, например, классический пример, который дает Петр для увеличения и уменьшения переменной выше.

Хорошее обсуждение можно найти в Tanenbaum, A. S. и Bos, H. (2015). Современные операционные системы (Pearson, Boston, Ma), 4-е изд., Стр. 1101. Предыдущие выпуски, а также веб-сайты курсов многочисленных университетов, которые предлагают материалы для курсов своих операционных систем.