Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Some basic explanations

Boost , The Boost C++ Libraries BoostBook Documentation Subset , Chapter 16. Boost.Interprocess

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Boost.Interprocessработает не только с процессами, но и с потоками.Boost.InterprocessМеханизмы синхронизации могут синхронизировать потоки из разных процессов, а также потоки из одного и того же процесса.

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

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

Одной из самых больших проблем с механизмами межпроцессной связи является срок службы механизма межпроцессной связи. Важно знать, когда из системы исчезает механизм межпроцессной связи. ВBoost.Interprocessмы можем иметь 3 типа настойчивости:

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

Некоторые нативные механизмы POSIX и Windows IPC имеют различную устойчивость, поэтому трудно достичь переносимости между нативными механизмами Windows и POSIX.Усиление.ИнтерпроцессКлассы имеют следующую устойчивость:

Table 16.1. Boost.Interprocess Persistence Table

Механизм

настойчивость

Общая память

Ядро или файловая система

Файл с картой памяти

Файловая система

Типы мутексов с разделением процессов

Процесс

Семафор, разделяемый процессом

Процесс

Условия совместного использования

Процесс

Файловый замок

Процесс

Очередь сообщений

Ядро или файловая система

Назван мутекс

Ядро или файловая система

Назван семафор

Ядро или файловая система

Названо условие

Ядро или файловая система


Как видите,Boost.Interprocessопределяет некоторые механизмы с сохранением «Kernel or Filesystem». Это связано с тем, что POSIX позволяет использовать эту возможность для реализации межпроцессных коммуникаций. Например, можно реализовать общую память с использованием картированных файлов памяти и получить персистентность файловой системы (например, не существует надлежащего известного способа эмулировать персистентность ядра с пользовательской библиотекой для совместно используемой памяти Windows с использованием нативной совместно используемой памяти или персистентность процесса для совместно используемой памяти POSIX, поэтому единственным переносным способом является определение персистентности «Kernel или Filesystem»).

Некоторые межпроцессные механизмы являются анонимными объектами, созданными в общей памяти или файлах с картой памяти, но другие межпроцессные механизмы нуждаются в имени или идентификаторе, чтобы два несвязанных процесса могли использовать один и тот же объект межпроцессного механизма. Примерами этого являются общая память, называемые mutexes и названные семафоры (например, родные окна CreateMutex/CreateSemaphore API).

Название, используемое для идентификации межпроцессного механизма, не является переносимым даже между системами UNIX. По этой причинеBoost.Interprocessограничивает это имя идентификатором переменной C++ или ключевым словом:

  • Начинается с буквы, строчки или строчки, такой как буква от a до z или от A до Z. Примеры:Общая память, общая память, sHaReDmEmOrY...
  • Может включать буквы, подчеркивание или цифры. Примеры:shm1, shm2and3, ShM3plus4...

НазванныеBoost.Interprocessресурсы (общая память, сопоставленные с памятью файлы, названные mutexes/conditions/semaphores) имеют ядро или устойчивость файловой системы. Это означает, что даже если все процессы, которые открыли эти ресурсы, закончатся, ресурс все равно будет доступен для открытия снова, и ресурс может быть уничтожен только посредством явного вызова их статической функции<remove>. Это поведение может быть легко понято, так как это тот же механизм, используемый функциями управления открытием / созданием / удалением файлов:

Table 16.2. Boost.Interprocess-Filesystem Analogy

Назван ресурс Interprocess

Соответствующий std файл

Соответствующая операция POSIX

Конструктор

std::fstream конструктор

Открыто

Разрушитель

std::fstream-деструктор

Закрыть

Член<remove>

Нет.<std::remove>

unlink


Теперь переписка между POSIX и Boost. Интерпроцесс относительно совместно используемой памяти и названных семафоров:

Table 16.3. Boost.Interprocess-POSIX shared memory

<shared_memory_object>Операция

Операция POSIX

Конструктор

shm_open

Разрушитель

Закрыть

Член<remove>

shm_unlink


Table 16.4. Boost.Interprocess-POSIX named semaphore

<named_semaphore>Операция

Операция POSIX

Конструктор

sem_open

Разрушитель

Закрыть

Член<remove>

sem_unlink


Наиболее важным свойством является то, чтодеструкторы названных ресурсов не удаляют ресурс из системы, они только освобождают ресурсы, выделенные системой для использования процессом для названного ресурса.Для удаления ресурса из системы программист должен использовать<remove>.

Названы ресурсы, предлагаемыеBoost.Interprocessдолжен справляться с проблемами разрешения, зависящими от платформы, также присутствующими при создании файлов. Если программист хочет совместно использовать общую память, отображать файлы памяти или называть механизмы синхронизации (мутексы, семафоры и т. д.) между пользователями, необходимо указать эти разрешения. К сожалению, традиционные разрешения UNIX и Windows очень разные иBoost.Interprocessне пытается стандартизировать разрешения, но не игнорирует их.

Все названные функции создания ресурсов имеют опциональную функцию<permissions object>, которая может быть настроена с разрешениями, зависящими от платформы.

Поскольку каждый механизм можно эмулировать с помощью диферентных механизмов (семафор может быть реализован с использованием отображенных файлов или нативных семафоров), типы разрешений могут варьироваться, когда реализация названных изменений ресурса (например: в мутексах Windows требуется<synchronizepermissions>, но это не относится к файлам). Чтобы избежать этогоBoost.Interprocessполагается на разрешения, подобные файлам, требующие разрешений на чтение-запись-удаление файлов для открытия именованных механизмов синхронизации (мутекс, семафоры и т. д.) и аппропиатных разрешений на чтение или чтение-запись-удаление для совместно используемой памяти. Этот подход имеет два преимущества: он похож на философию UNIX и программисту не нужно знать, как реализуется названный ресурс.


PrevUpHomeNext

Статья Some basic explanations раздела The Boost C++ Libraries BoostBook Documentation Subset Chapter 16. Boost.Interprocess может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Chapter 16. Boost.Interprocess ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-07-05 09:53:09/0.008310079574585/0