写在最前:
1. 原文来源:http://www.boost.org/doc/libs/1_49_0_beta1/doc/html/interprocess.html#interprocess.intro
2. 基于boost_1_49_0_beta1
3. 译者水平有限,不当之处请各位海涵。同时盼多多交流。
一.介绍
创建 Boost.Interprocess 测试编译器 |
Boost.Interprocess简化了普通进程间通信以及同步机制的使用,并且提供了以下广泛内容:
- 共享内存
- 内存映射文件
- 在共享内存和内存映射文件中使用信号量,互斥,条件变量以及可升级互斥类型
- 这些同步对象的命名版本,类似于UNIX/Windows的sem_open/CreateSemaphore API
- 文件锁
- 相对指针
- 消息队列
Boost.Interprocess同时也提供了更高层次的进程间通信机制,用于分配共享内存或内存映射文件的动态部分(一般是分配一个固定大小的内存段)。使用此机制,Boost.Interprocess在共享内存以及内存映射文件中提供了有用的工具用于构建C++对象,包括类STL容器:
- 在共享内存或内存映射文件中动态创建匿名和命名对象
- 与共享内存或内存映射文件兼容的类STL容器
- 准备为共享内存/内存映射文件执行一些内存分配模式的类STL分配器(类似内存池)
创建 Boost.Interprocess
Boost.Interprocess不需要编译,因为它是一个仅有头文件的库(译注:实际上Boost中的大多数库都是采用源代码引用的方式使用,不需要编译)。仅需要在你的编译器中包含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 >= 7.1
- GCC >= 4.1
- Intel 11