Fir*_*cer 4 c++ concurrency multithreading ipc
我有一个由两个进程组成的项目,我需要以快速有效的方式在它们之间传递一些数据.
我知道我可以使用套接字来使用TCP来执行此操作,即使这两个进程始终存在于同一台计算机上,但这似乎不是一个非常有效的解决方案.
我看到很多关于在Linux上使用"管道"的信息.但是我主要想要Windows和Linux(最好通过跨平台库),理想情况是安全,无阻塞.
另一个重要的事情是我需要支持整个应用程序的多个实例(即两个进程),每个实例都有自己独立的通信对象副本.
还有一种跨平台的方式来产生一个新的过程吗?
Kir*_*sky 12
Boost.Interprocess简化了通用进程间通信和同步机制的使用,并提供了大量的:
- 共享内存.
- 内存映射文件.
- 信号量,互斥量,条件变量和可升级的互斥锁类型,用于将它们放在共享内存和内存映射文件中.
- 这些同步对象的命名版本,类似于UNIX/Windows sem_open/CreateSemaphore API.
- 文件锁定.
- 相对指针.
- 消息队列.
Boost.Interprocess还提供更高级别的进程间机制,以动态分配共享内存或内存映射文件的部分(通常,分配固定大小的内存段的部分).使用这些机制,Boost.Interprocess提供了有用的工具来在共享内存和内存映射文件中构造C++对象,包括类似STL的容器:
- 在共享内存或内存映射文件中动态创建匿名和命名对象.
- 类似STL的容器与共享内存/内存映射文件兼容.
- 类似STL的分配器准备好实现多个内存分配模式(如池)的共享内存/内存映射文件.
Boost.Interprocess已在以下编译器/平台中进行了测试:
- Visual 7.1 Windows XP
- Visual 8.0 Windows XP
- GCC 4.1.1 MinGW
- GCC 3.4.4 Cygwin
- 英特尔9.1 Windows XP
- GCC 4.1.2 Linux
- GCC 3.4.3 Solaris 11
- GCC 4.0 MacOs 10.4.1
对于IPC,Windows支持命名管道,就像Linux一样,除了管道名称遵循不同的格式,因为两个操作系统之间的路径格式不同.这是您可以通过简单的预处理器定义来克服的.两个操作系统还支持管道上的非阻塞IO和使用select()的IO多路复用.
| 归档时间: |
|
| 查看次数: |
2966 次 |
| 最近记录: |