Следствия принятой логики блокирования файлов

Следствия принятой логики блокирования файлов

Несмотря на всю естественность логики блокирования файлов, представленной в таблицах 3.1 и 3.2, последствия ее применения могут оказаться для вас неожиданными и вызвать на первый взгляд необъяснимые изменения в поведении программы. Некоторые возможные примеры этого приводятся ниже.

• Предположим, что процессы А и В периодически приобретают разделяемые блокировки файла, а процесс С блокируется при попытке получения монопольной блокировки того же файла после того, как процесс А стал владельцем собственной разделяемой блокировки. В этих условиях процесс В может получить свою разделяемую блокировку, но процесс С будет оставаться блокированным даже после того, как процесс А снимет свою блокировку файла. Процесс С будет оставаться блокированным до тех пор, пока все процессы не снимут свои блокировки, даже если они были получены уже тогда, когда процесс С пребывал в блокированном состоянии. Согласно этому сценарию процесс С может оставаться блокированным сколь угодно долго, тогда как другие процессы сохраняют возможность управления своими разделяемыми блокировками.

• Предположим, что процесс А стал владельцем разделяемой блокировки файла, а процесс В пытается осуществить считывание файла без предварительного приобретения разделяемой блокировки. В этой ситуации чтение может быть успешно осуществлено даже несмотря на то, что процесс, выполняющий чтение, не владеет ни одной блокировкой данного файла, поскольку операция чтения не вступает в конфликт с существующей разделяемой блокировкой.

• Все, о чем говорилось выше, относится не только к блокировке файла в целом, но и к блокировке отдельного его участка.

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

Использование блокирования файлов

Рассмотрение примеров блокирования файлов мы отложим до главы 6, в которой обсуждается управление процессами. В программах 4.2, 6.4, 6.5 и 6.6 блокирование файлов используется для обеспечения того, чтобы в каждый момент времени изменять файл мог только один процесс.

В UNIX блокирование файлов является уведомляющим (advisory); выполнение процесса ввода/вывода может продолжаться даже в том случае, если попытка получения блокировки оказалась неудачной (логика, отраженная в табл. 3.1, действует и в этом случае). Это обеспечивает в UNIX возможность блокирования файлов взаимодействующими процессами, но любой другой процесс может нарушить описанный протокол.

Для получения уведомляющей блокировки используются параметры, указываемые при вызове функции fcntl. Допустимыми командами (второй параметр) являются F_SETLK, F_SETLKW и F_GETLK. Информация о типе блокировки (F_RDLCK, F_WRLCK или F_UNLCK) и блокируемой области содержится в дополнительной структуре данных.

Помимо этого, в некоторых UNIX-системах доступна обязательная (mandatory) блокировка, обеспечиваемая путем определения групповых полномочий для файла с помощью команды chmode.

Блокирование файлов в UNIX имеет много особенностей. Например, блокировки наследуются при выполнении вызова функции exec.

Блокирование файлов библиотекой С не поддерживается, но в Visual C++ обеспечивается поддержка нестандартных расширений механизма блокирования.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг:

Следствия применения перекрывающегося ввода/вывода

Из книги автора

Следствия применения перекрывающегося ввода/вывода Перекрывающийся ввод/вывод выполняется в асинхронном режиме. Это имеет несколько следствий.• Операции перекрывающегося ввода/вывода не блокируются. Функции ReadFile, WriteFile, TransactNamedPipe и ConnectNamedPipe осуществляют возврат, не


Имена файлов

Из книги автора

Имена файлов Как мы уже видели, ни метаданные, ни тем более блоки хранения данных, не содержат имени файла. Имя файла хранится в файлах специального типа — каталогах. Такой подход позволяет любому файлу, т. е. фактическим данным, иметь теоретически неограниченное число


3.1.2. Безопасность файлов

Из книги автора

3.1.2. Безопасность файлов В гл. 4 мы будем подробно говорить о правах доступа. Это основа обеспечения безопасности, но и только, и надеяться на это нельзя. Необходимы дополнительные инструменты сохранения целостности системы, или, по крайней мере, вы должны следить за


Вставка бизнес-логики в команды обновления

Из книги автора

Вставка бизнес-логики в команды обновления Прежде уже описывалось, как хранимые процедуры для специализированных команд обновления можно использовать для вставки бизнес-логики в хранимые процедуры, которые вызываются автоматически. По сравнению с прежними версиями


10.1.6. Блокировка файлов

Из книги автора

10.1.6. Блокировка файлов В тех операционных системах, которые поддерживают такую возможность, метод flock класса File блокирует или разблокирует файл. Вторым параметром может быть одна из констант File::LOCK_EX, File::LOCK_NB, File::LOCK_SH, File::LOCK_UN или их объединение с помощью оператора ИЛИ.


Наборы системной логики для десктопных процессоров AMD Олег Нечай

Из книги автора

Наборы системной логики для десктопных процессоров AMD Олег Нечай Опубликовано 27 июня 2011 года Презентация наборов системной логики 990FX, 990X и 970 состоялась 1 июня 2011 года, а первые системные платы на их основе демонстрировались тогда же, в начале июня,


4.2. Основные законы алгебры логики и правила преобразования логических выражений

Из книги автора

4.2. Основные законы алгебры логики и правила преобразования логических выражений В алгебре логики имеются законы, которые записываются в виде соотношений. Логические законы позволяют производить равносильные (эквивалентные) преобразования логических выражений.


Наборы системной логики для процессоров Intel Олег Нечай

Из книги автора

Наборы системной логики для процессоров Intel Олег Нечай Опубликовано 23 июня 2011 года Новая архитектура потребовала и новой логики, к тому же чипы Sandy Bridge рассчитаны на установку в собственный разъём LGA1155 и несовместимы с сокетами для предыдущего


Вероятностный процессор: триумф байесовской логики Олег Нечай

Из книги автора

Вероятностный процессор: триумф байесовской логики Олег Нечай Опубликовано 23 августа 2010 года Инженеры американской компании Lyric Semiconductor заявили о создании технологии, способной революционно изменить привычную логическую конструкцию


Наборы системной логики для процессоров AMD Олег Нечай

Из книги автора

Наборы системной логики для процессоров AMD Олег Нечай Опубликовано 28 июня 2010 года Самые распространённые чипсеты AMD серии 7xx для с архитектурой K10 появились на рынке уже довольно давно: первые наборы логики были представлены ещё осенью 2007 года –