Интернет магазин китайских планшетных компьютеров |
|
Компьютеры - Критическая секция22 января 2011часть программы, в которой есть обращение к совместно используемым данным. При нахождении в критической секции двух процессов, возникает состояние «гонки». Для избежания данной ситуации необходимо выполнение четырех условий:
Критическая секция объект синхронизации потоков, позволяющий предотвратить одновременное выполнение некоторого набора операций несколькими потоками. Критическая секция выполняет те же задачи, что и мьютекс. Между мьютексом и критической секцией есть терминологические различия, так процедура, аналогичная захвату мьютекса, называется входом в критическую секцию, снятию блокировки мьютекса выходом из критической секции. Процедура входа и выхода из критических секций обычно занимает меньшее время, нежели аналогичные операции мьютекса, что связано с отсутствием необходимости обращаться к ядру ОС. В операционных системах семейства Microsoft Windows разница между мьютексом и критической секцией в том, что мьютекс является объектом ядра и может быть использован несколькими процессами одновременно, критическая секция же принадлежит процессу и служит для синхронизации только его потоков. Критические секции Windows имеют оптимизацию, заключающуюся в использовании атомарно изменяемой переменной наряду с объектом «событие синхронизации» ядра. Захват критической секции означает атомарное увеличение переменной на 1. Переход к ожиданию на событии ядра осуществляется только в случае, если значение переменной до захвата было уже больше 1, то есть происходит реальное «соревнование» двух или более потоков за ресурс. Таким образом, при отсутствии соревнования захват/освобождение критической секции обходятся без обращений к ядру. Кроме того, захват уже занятой критической секции до обращения к ядру какое-то небольшое время ждёт в цикле опроса переменной, и, если переменная становится равной 0, то захват происходит без обращений к ядру. Сходный объект в ядре Windows называется FAST_MUTEX. Он отличается от критической секции отсутствием поддержки рекурсивного повторного захвата тем же потоком. Аналогичный объект в Linux называется фьютекс. Просмотров: 1408
|