Читаем Linux API. Исчерпывающее руководство полностью

Блокировки файлов. Этот метод синхронизации специально создан для координации действий разных процессов, которые работают с одним и тем же файлом. С его помощью также можно координировать доступ к другим общим ресурсам. Блокировки файлов бывают двух видов: блокировки чтения (разделяемые) и блокировки записи (эксклюзивные). Блокировкой чтения одного и того же файла (или его участка) может владеть неограниченное количество процессов. Но если файл (или его участок) заблокирован на запись каким-либо процессом, остальные процессы не могут ни считывать его содержимое, ни записывать в него. В Linux механизм блокировки файлов предоставляется с помощью системных вызовов flock() и fcntl(). Первый позволяет процессам устанавливать разделяемые или эксклюзивные блокировки на весь файл целиком. Ввиду своих ограниченных возможностей данный вызов редко используется в наши дни. Второй обеспечивает блокировку на уровне записей, позволяя процессам устанавливать неограниченное количество блокировок для чтения и записи разных участков одного и того же файла.

Мьютексы и условные переменные. Эти средства синхронизации обычно применяются в сочетании с потоками, как описано в главе 30.

Ряд реализаций UNIX, включая дистрибутивы Linux, в которых библиотека glibc поддерживает NPTL-потоки, позволяют разделять между процессами мьютексы и условные переменные. Эта возможность предусмотрена стандартом SUSv3, но не является обязательной. Она поддерживается не во всех UNIX-системах и обычно не используется для синхронизации процессов.

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

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

43.4. Сравнение IPC-механизмов

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

Идентификация IPC-объектов и их дескрипторов

Чтобы получить доступ к IPC-объекту, у процесса должна быть возможность его идентифицировать; после «открытия» объекта процесс должен использовать некий дескриптор, который на него ссылается. Эти свойства в контексте разных видов IPC-механизмов перечислены в табл. 43.1.

Таблица 43.1. Идентификаторы и дескрипторы в различных видах IPC-механизмов

Механизм — Имя для идентификации объекта — Дескриптор, ссылающийся на объект в программе

Канал — Без имени — Дескриптор файла

Очередь FIFO — Pathname — Дескриптор файла

Сокет домена UNIX — Pathname — Дескриптор файла

Сокет интернет-домена — IP-адрес + номер порта — Дескриптор файла

Очередь сообщений в System V–IPC-ключ в System V–IPC-идентификатор в System V

Семафор в System V–IPC-ключ в System V–IPC-идентификатор в System V

Разделяемая память в System V–IPC-ключ в System V–IPC-идентификатор в System V

Очередь POSIX-сообщений — IPC-путь в POSIX — mqd_t (дескриптор очереди сообщений)

Именованный POSIX-семафор — IPC-путь в POSIX — sem_t * (указатель на семафор)

Безымянный POSIX-семафор — Без имени — sem_t * (указатель на семафор)

Разделяемая память в POSIX–IPC-путь в POSIX — Дескриптор файла

Анонимное отображение — Без имени — Отсутствует

Файл, отображенный в память — Pathname — Дескриптор файла

Блокировка flock() — Pathname — Дескриптор файла

Блокировка fcntl() — Pathname — Дескриптор файла

Возможности

Существуют функциональные различия, которые могут повлиять на выбор того или иного IPC-механизма. Для начала кратко перечислим различия между средствами передачи данных и разделяемой памятью.

• Средства передачи данных используют операции чтения и записи, а переданная информация потребляется только одним процессом-адресатом. Управление потоком данных между отправителем и получателем, а также их синхронизация (чтобы блокировать получателя, который пытается прочитать данные из пустого источника) автоматически осуществляется ядром. Эта модель хорошо согласуется с архитектурой многих приложений.

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных