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

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

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

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

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

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

0

Решение

Для 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).

-1

Другие решения


По вопросам рекламы [email protected]