Boost C++ 库

...世界上最受推崇和设计精良的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ 编码标准

PrevUpHomeNext

第16章。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 容器
Boost 无序容器
Boost.MultiIndex 容器
内存分配算法
simple_seq_fit:一个简单的共享内存管理算法
rbtree_best_fit:最佳匹配对数时间复杂度分配
直接 iostream 格式化:vectorstream 和 bufferstream
直接在字符向量中格式化:vectorstream
直接在字符缓冲区中格式化:bufferstream
所有权智能指针
侵入式指针
作用域指针
共享指针和弱指针
独占指针
架构和内部
基本指南
从内存算法到托管段
分配器和容器
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