В вашей программе отсутствует синхронизация процессов. По сути, ваш второй процесс может попытаться получить сегмент общей памяти, который не существует в данный момент. Поскольку вы работаете с двумя исполняемыми файлами, приобретение PID не является опцией, следовательно, мы не можем использовать сигналы. Но мы можем заставить его работать только с сегментами разделяемой памяти.
Создайте дополнительный сегмент совместно используемой памяти, такой как data_ready
. Вы хотите использовать IPC_CREAT на обоих, но не IPC_EXCL . И пусть ваш первый процесс установит его на единицу после инициализации массива. Поскольку мы использовали IPC_CREAT , ни один из процессов не будет перезаписывать данные, если процесс не существует и, если он не существует, первый процесс в любом случае инициализирует его как 0. Вы можете вфакт, удалите IPC_EXCL в вашем первом процессе, если вы используете это.
Сделайте так, чтобы ваш первый процесс установил data_ready в 1, как только он инициализировал массив, и заблокируйте ваш второй процесс, используя команду, такую как `` `while (data_ready == 0);` `` `
Это довольно грубый метод для этого. Конечно, вы можете сделать это намного лучше с потоками, семафорами, очередями сообщений и т. Д. Но в настоящее время это должно сделать работу.