Основы программирования в Linux
Шрифт:
2. Далее следует критическая секция:
3. В этом месте она заканчивается:
Для
Затем с помощью приведенной далее команды запустите две копии программы:
Она запускает одну копию программы в фоновом режиме, а вторую — как основную программу. Далее приведен вывод:
В приведенном примере показано, как взаимодействуют две выполняющиеся копии одной и той же программы. Если вы попробуете выполнить данный пример, то почти наверняка увидите другие идентификаторы процессов в выводе, но поведение программ будет тем же самым.
Как это работает
Для демонстрации вы 10 раз выполняете в программе цикл с помощью оператора
Поскольку это всего лишь пример, вы ждете очень короткий промежуток времени. Когда программа завершает использование
Важно уяснить, что это совместное мероприятие, и вы должны корректно писать программы для его работы. Программа, потерпевшая неудачу в создании файла с блокировкой, не может просто удалить файл и попробовать снова, Возможно, в дальнейшем она сумеет создать файл с блокировкой, но у другой программы, уже создавшей такой файл, нет способа узнать о том, что она лишилась исключительного доступа к ресурсу.
Блокировка участков файла
Создание файлов с блокировкой подходит для управления исключительным доступом к ресурсам, таким как последовательные порты или редко используемые файлы, но этот способ не годится для доступа к большим совместно используемым файлам. Предположим, что у вас есть большой файл, написанный одной программой и одновременно обновляемый многими программами. Такая ситуация может возникнуть, если программа записывает какие-то данные, получаемые непрерывно или в течение длительного периода, и обрабатывает их с помощью нескольких разных программ. Обрабатывающие программы не могут ждать, пока программа, записывающая данные, завершится — она работает постоянно, поэтому программам нужен какой-то способ кооперации для обеспечения одновременного доступа к одному и тому же файлу.
Урегулировать эту ситуацию можно, блокируя участки файла. При этом конкретная часть файла блокируется, но другие программы могут иметь доступ к другим участкам файла. Это называется блокировкой сегментов или участков файла. У системы Linux есть (как минимум) два способа сделать это: с помощью системного вызова
Вы встречали вызов fcntl в главе 3. У него следующее определение:
Системный вызов
Учитель из прошлого тысячелетия
6. Соприкосновение миров
Фантастика:
фэнтези
попаданцы
рейтинг книги
Неучтенный элемент. Том 10
10. Антимаг. Вне системы
Фантастика:
фэнтези
рейтинг книги
В безумии
Фантастика:
научная фантастика
рейтинг книги
Золушка (сборник)
Мастера остросюжетного романа
Детективы:
полицейские детективы
рейтинг книги
"Фантастика 2025-112". Компиляция. Книги 1-30
Фантастика 2025. Компиляция
Фантастика:
фэнтези
боевая фантастика
попаданцы
рейтинг книги
"Искажающие реальность" Компиляция. Книги 1-14
Искажающие реальность
Фантастика:
боевая фантастика
космическая фантастика
киберпанк
рпг
рейтинг книги
Марш обреченных
1. Хроники геноцида
Фантастика:
фэнтези
попаданцы
рейтинг книги
Стоялов Максим Викторович
Документальная литература:
биографии и мемуары
рейтинг книги
Жизнь замечательных Блонди
1. Ai no Kusabi
Фантастика:
космическая фантастика
рейтинг книги