Есть ли причина, по которой вы делаете это с процессами, а не с потоками? Это может усложнить вашу жизнь с точки зрения синхронизации.
Если бы вы работали с потоками, я бы сказал вам, чтобы защитить ваш доступ с помощью семафора, чтобы вы могли гарантировать, что читатель не читает тот же набор данных, который пишет писатель; Я считаю, что реализации семафоров и других примитивов синхронизации существуют и для разделяемой памяти между процессами, но это немного реже.
Причина, по которой вам определенно следует использовать чужие примитивы синхронизации, заключается в том, что на современном оборудовании записи могут быть переупорядочены или отложены, например, первая программа «в данный момент находится на 101-м сервере», но на самом деле записи в данные для 100-го сервера еще не записаны обратно из ЦП. Семафор или мьютекс будут включать соответствующие инструкции по выделению памяти для сброса записей, чтобы память выглядела согласованной с другими потоками / процессами; Вы должны абсолютно точно использовать чужую тщательно написанную реализацию, а не писать собственную логику синхронизации.
Кроме того, при тестировании очень важно проводить тестирование на многопроцессорной машине, поскольку условия состязания между процессами гораздо реже появляются на однопроцессорной машине.