Boost C++ 库

……是世界上最受推崇、设计最精良的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ Coding Standards

第 15 章 Boost.Interprocess - Boost C++ 函数库
PrevUpHomeNext

第 15 章 Boost.Interprocess

Ion Gaztanaga

根据 Boost 软件许可证版本 1.0 发布。(参见随附文件 LICENSE_1_0.txt 或在 https://boost.ac.cn/LICENSE_1_0.txt 复制)

目录

介绍
构建 Boost.Interprocess
测试的编译器
给急躁者的快速指南
使用共享内存作为无名内存块池
创建命名共享内存对象
使用偏移智能指针进行共享内存
在共享内存中创建向量
在共享内存中创建映射
一些基本解释
进程和线程
在进程之间共享信息
进程间机制的持久性
进程间机制的名称
进程间命名资源的构造函数、析构函数和生命周期
权限
进程间共享内存
共享内存
内存映射文件
关于映射区域的更多信息
在映射区域中构造对象时的限制
独立于地址的指针映射:offset_ptr
同步机制
同步机制概述
互斥量
条件变量
信号量
可共享和可升级的互斥量
通过移动语义的锁转移
文件锁
消息队列
托管内存段
简化进程间数据通信
托管共享内存
托管映射文件
托管内存段功能
托管内存段高级功能
托管堆内存和托管外部缓冲区
分配器和内存分配算法
Boost.Interprocess 分配器简介
隔离存储节点分配器
自适应池节点分配器
托管内存段中的容器
Boost.Interprocess 分配器的容器要求
托管内存段中的可移植容器
这是在哪里分配的?
容器的容器
与 Boost.Interprocess 兼容的 Boost 容器
Boost 无序容器
Boost.MultiIndex 容器
内存分配算法
simple_seq_fit:一个简单的共享内存管理算法
rbtree_best_fit:最佳匹配对数时间复杂度分配
直接 iostream 格式化:vectorstream 和 bufferstream
直接在字符向量中格式化:vectorstream
直接在字符缓冲区中格式化:bufferstream
所有权智能指针
侵入式指针
作用域指针
共享指针和弱指针
Unique pointer
架构和内部原理
基本指南
从内存算法到托管段
分配器和容器
Boost.Interprocess 的性能
自定义 Boost.Interprocess
编写新的共享内存分配算法
为 Boost.Interprocess 构建自定义 STL 兼容分配器
构建自定义索引
致谢、说明和链接
Windows 用户说明
Linux 用户注意事项
FreeBSD 用户注意事项
macOS 用户注意事项
致谢...
发布说明
书籍和有趣的链接
未来改进...
索引和参考
索引
Boost.Interprocess 头文件参考

Boost.Interprocess 简化了常用进程间通信和同步机制的使用,并提供了广泛的此类机制。

  • 共享内存。
  • 内存映射文件。
  • 信号量、互斥量、条件变量和可升级互斥量类型,可将它们放置在共享内存和内存映射文件中。
  • 这些同步对象的命名版本,类似于 UNIX/Windows 的 sem_open/CreateSemaphore API。
  • 文件锁定。
  • 相对指针。
  • 消息队列。

Boost.Interprocess 还提供了更高级的进程间机制,用于动态分配共享内存或内存映射文件的部分(通常是分配固定大小内存段的部分)。通过使用这些机制,Boost.Interprocess 提供了有用的工具,用于在共享内存和内存映射文件中构造 C++ 对象,包括类 STL 容器。

  • 在共享内存或内存映射文件中动态创建匿名和命名对象。
  • 与共享内存/内存映射文件兼容的类 STL 容器。
  • 适用于共享内存/内存映射文件的类 STL 分配器,实现了多种内存分配模式(如池化)。

Boost.Interprocess 是一个仅头文件的库,因此无需编译。只需将您的 Boost 头文件目录包含在编译器的包含路径中即可。

Boost.Interprocess 依赖于 Boost.DateTime,该库需要单独编译。但是,Boost.Interprocess 使用的子集不需要任何单独的编译,因此用户可以定义 BOOST_DATE_TIME_NO_LIB 来避免 Boost 尝试自动链接 Boost.DateTime

在 POSIX 系统中,Boost.Interprocess 使用 pthread 系统调用来实现互斥量、条件变量等类……在某些操作系统上,这些 POSIX 调用实现在单独的库中,这些库不会被编译器自动链接。例如,在某些 Linux 系统中,POSIX pthread 函数实现在 librt.a 库中,因此您可能需要在链接使用 Boost.Interprocess 的可执行文件或共享库时添加该库。如果您遇到与这些 pthread 函数相关的链接错误,请查阅您系统的文档,了解哪个库实现了它们。

Boost.Interprocess 已在以下编译器/平台上进行了测试:

  • Visual C++ >= 7.1。
  • GCC >= 4.1。
[Warning] 警告

GCC < 4.3 和 MSVC < 9.0 已弃用,将在下一个版本中移除。


PrevUpHomeNext