C++多个进程?

Fir*_*cer 4 c++ concurrency multithreading ipc

我有一个由两个进程组成的项目,我需要以快速有效的方式在它们之间传递一些数据.

我知道我可以使用套接字来使用TCP来执行此操作,即使这两个进程始终存在于同一台计算机上,但这似乎不是一个非常有效的解决方案.

我看到很多关于在Linux上使用"管道"的信息.但是我主要想要Windows和Linux(最好通过跨平台库),理想情况是安全,无阻塞.

另一个重要的事情是我需要支持整个应用程序的多个实例(即两个进程),每个实例都有自己独立的通信对象副本.

还有一种跨平台的方式来产生一个新的过程吗?

Kir*_*sky 12

看一下Boost.Interprocess

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

  • boost :: interprocess在Windows上有一个虚拟实现,它使用busy-wait来处理所有事情.我不会自己推荐它. (2认同)

Tyl*_*nry 7

对于IPC,Windows支持命名管道,就像Linux一样,除了管道名称遵循不同的格式,因为两个操作系统之间的路径格式不同.这是您可以通过简单的预处理器定义来克服的.两个操作系统还支持管道上的非阻塞IO和使用select()的IO多路复用.