【问题标题】:Writing a Shared Queue for a multi-process c/c++ program为多进程 c/c++ 程序编写共享队列
【发布时间】:2014-11-29 02:04:15
【问题描述】:

谁能给我一个 C/C++ 中多进程共享队列 (FIFO) 的好例子吗?

请注意,我不是在寻找基于线程(pthread)的实现。虽然我也欢迎关于多线程的建议..

基本上是在寻找可以与 fork 和 exec 一起使用的东西,因为我已经使用 fork/exec 编写了一个应用程序。

** IPC 管道也是我不想要的东西,因为如果发送方/接收方中的任何一个进程死亡,它们就会死亡 *** 我想要一些不是暂时的,即队列可以等待其他进程变为活动状态?

我在英特尔 TBB 和 boost 线程库中找到了线程解决方案。但我在共享内存域中寻找更多的东西。

【问题讨论】:

标签: c++ c queue fork multiprocess


【解决方案1】:

对于 IPC(进程间通信),我在 Unix 系统上使用了管道,这是一个示例。

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>

#define BUFF_SIZE 50
#define READ 0
#define WRITE 1

int main() {
    char write_msg[BUFF_SIZE] = "Hi, this is child proces!!!";
    char read_msg[BUFF_SIZE];

    int fd[2];

    pid_t pid;

    pipe(fd);

    pid = fork();

    if (pid == 0) {
        close(fd[READ]);
        write(fd[WRITE], write_msg, strlen(write_msg) + 1);
        close(fd[WRITE]);
    }
    else {
        close(fd[WRITE]);
        read(fd[READ], read_msg, BUFF_SIZE);
        printf("The message is: %s", read_msg);
        close(fd[READ]);
    }

    return 0;
} 

这在 Windows 上不起作用,但如果我在你的位置,我会寻找一种使用管道(或其他 IPC 机制)的方法。

【讨论】:

  • 感谢您的建议,但管道对我不起作用。如果发送方或接收方不存在,它们就会死掉,即两个进程都需要处于活动状态才能进行通信,而且它们本质上是“流式传输”的。我想要队列可以在一段时间内保存值的东西。
猜你喜欢
  • 1970-01-01
  • 2012-05-19
  • 2020-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-15
  • 2012-04-12
  • 1970-01-01
相关资源
最近更新 更多