Написание общей очереди для многопроцессорной программы на языке c / c ++

0

Может ли кто-нибудь дать мне хороший пример совместной очереди с несколькими процессами (FIFO) в C/C++?

Обратите внимание, что я не ищу реализацию на основе потока (pthread). Хотя я приветствую предложения и для многопоточных.

В основном ищет что-то, что может работать с fork и exec, поскольку у меня есть уже написанное приложение, использующее fork/exec.

** IPC-каналы также я не ищу, поскольку они умирают, если любой из процессов отправитель/получатель умирает *** Я бы хотел, чтобы что-то не было временным, то есть очередь могла ждать, пока другой процесс станет активным?

Я нашел решения для потоков в Intel TBB и увеличил библиотеки потоков. Но я ищу что-то еще в области общей памяти.

  • 0
    justsoftwaresolutions.co.uk/threading/… Я могу добавить ответ без ссылки позже, но эта ссылка - действительно хорошее решение.
  • 0
    Как я уже сказал, я ищу многопроцессное решение на основе fork exec ... Но я посмотрел на ссылку, которая также кажется полезной
Показать ещё 1 комментарий
Теги:
queue
fork
multiprocess

1 ответ

-1

Для IPC (inter process communication) я использовал каналы в системе 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).

  • 0
    Спасибо за предложение, но трубы не будут работать на меня. Они умирают, если нет ни отправителя, ни получателя, т. Е. Оба процесса должны быть активны для связи, а также они являются «потоковыми» по своей природе. Я хотел бы что-то, где очередь может хранить значения в течение некоторого времени.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню