Общие ресурсы от boost :: interprocess (разделяемая память и т. Д.) Требуют, чтобы вы обеспечили необходимую синхронизацию. Причиной этого является то, что вам может не потребоваться синхронизация, и это обычно довольно дорого с точки зрения производительности.
Скажем, например, что у вас есть процесс, который записывает в общую память текущую статистику чего-либо в 32-битном целочисленном формате, и несколько процессов, которые читают эти значения. Поскольку значения являются целыми числами (и, следовательно, на вашей платформе чтение и запись являются атомарными), и у вас есть один процесс, пишущий их, и несколько процессов, читающих их, синхронизация не требуется для этого проекта.
Однако в некоторых примерах вам потребуется синхронизация, например, если в приведенном выше примере было несколько писателей или если вместо целых чисел вы использовали строковые данные. В бусте есть различные механизмы синхронизации (а также не бустовые, но так как вы уже используете буст), описанные здесь:
[Boost info для стабильной версии: 1.48]
http://www.boost.org/doc/libs/1_48_0/doc/html/interprocess/synchronization_mechanisms.html
[Увеличить информацию о версии, которую вы используете: 1.40]
http://www.boost.org/doc/libs/1_40_0/doc/html/interprocess/synchronization_mechanisms.html
При использовании совместно используемой памяти обычной практикой является размещение механизма синхронизации у основания сегмента совместно используемой памяти, где он может быть анонимным (то есть ядро ОС не предоставляет доступ к нему по имени). Таким образом, все процессы знают, как заблокировать сегмент совместно используемой памяти, и вы можете связать блокировки с их сегментами (например, если у вас их было несколько)
Помните, что мьютекс требует того же потока выполнения (внутри процесса), чтобы разблокировать его, который заблокировал его. Если вам требуется блокировка и разблокировка объекта синхронизации из разных потоков выполнения, вам нужен семафор.
Пожалуйста, убедитесь, что если вы решите использовать мьютекс, то он является мьютексом между процессами (http://www.boost.org/doc/libs/1_48_0/doc/html/boost/interprocess/interprocess_mutex.html), в отличие от мьютекса в библиотеке потоков потоков, который предназначен для одного процесса с несколькими потоками.