Любая проблема в повторном отображении разделяемой памяти, созданной изначально с использованием MAP_SHARED - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть приложение, в котором несколько процессов работают с одной и той же общей памятью, созданной с использованием карт памяти с файловой поддержкой.Чтение / запись в эту общую память контролируется.

Один из процессов владеет файлом на диске, то есть инициализирует его с определенным размером с помощью вызова 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 для всех индексов.Насколько я понимаю, удаление и повторное отображение в одном процессе не должно влиять на общее отображение, существующее в памяти.Какой должен быть правильный протокол здесь?Разве процессы не разделяют одну и ту же копию отображения в памяти?

...