Кто-нибудь может дать мне хороший пример многопроцессорной общей очереди (FIFO) в C / C ++?
Обратите внимание, я не ищу реализацию на основе потоков (pthread). Хотя я приветствую предложения по многопоточности, а также ..
В основном ищу что-то, что может работать с fork и exec, так как у меня уже есть написанное приложение, использующее fork / exec.
** Каналы IPC — это также то, что я не ищу, поскольку они умирают, если один из процессов отправитель / получатель умирает ***
Я хотел бы что-то, что не является переходным, то есть очередь может ждать, пока другой процесс станет активным?
Я нашел решения для потоков в библиотеках Intel TBB и Boost Threading. Но я ищу что-то еще в области общей памяти.
Для 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).