У меня есть приложение, в котором несколько процессов работают с одной и той же общей памятью, созданной с использованием карт памяти с файловой поддержкой.Чтение / запись в эту общую память контролируется.
Один из процессов владеет файлом на диске, то есть инициализирует его с определенным размером с помощью вызова ftruncate ().
Затем все другие процессы создают отображение памяти, используя mmap (MAP_SHARED) с 0 в качестве начального смещения, но разной длины.
Process1 - arr = mmap (0, len1 * sizeof (char), PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
Process2 - arr = mmap (0, len2 * sizeof (char), PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
Где len2
Поскольку процессы получают доступ (чтение / запись) к этой совместно используемой памяти, один из процессов решает переназначить большую длину файла (len2
munmap (arr, len2 * sizeof (char));
arr = mmap (0, len3 * sizeof (char), PROT_READ | PROT_WRITE, MAP_SHARED,fd, 0);
Однако это действие приводит к стиранию предыдущих изменений в общей памяти.Массив arr имеет значения по умолчанию 0 для всех индексов.Насколько я понимаю, удаление и повторное отображение в одном процессе не должно влиять на общее отображение, существующее в памяти.Какой должен быть правильный протокол здесь?Разве процессы не разделяют одну и ту же копию отображения в памяти?