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

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

Несмотря на всю естественность логики блокирования файлов, представленной в таблицах 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++ обеспечивается поддержка нестандартных расширений механизма блокирования.

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

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

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

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

Из книги Разгони свой сайт автора Мациевский Николай

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


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

Из книги Обработка баз данных на Visual Basic®.NET автора Мак-Манус Джеффри П

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


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

Из книги Цифровой журнал «Компьютерра» № 31 [23.08.2010 — 29.08.2010] автора Журнал «Компьютерра»

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


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

Из книги Цифровой журнал «Компьютерра» № 74 [20.06.2011 — 26.06.2011] автора Журнал «Компьютерра»

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


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

Из книги Цифровой журнал «Компьютерра» № 75 [27.06.2011 — 03.07.2011] автора Журнал «Компьютерра»

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


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

Из книги Феномен науки. Кибернетический подход к эволюции автора Турчин Валентин Фёдорович

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


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

Из книги Информатика: аппаратные средства персонального компьютера автора Яшин Владимир Николаевич

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


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

Из книги Программирование на языке Ruby [Идеология языка, теория и практика применения] автора Фултон Хэл

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


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

Из книги Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ автора Борри Хелен

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


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

Из книги Операционная система UNIX автора Робачевский Андрей М.

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


Имена файлов

Из книги Wiki-правительство [Как технологии могут сделать власть лучше, демократию – сильнее, а граждан – влиятельнее] автора Новек Бет

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