Да, именно по той причине, которую вы сказали. Лучше защищать память каждого процесса и делиться только тем, что действительно необходимо. Таким образом, каждый потребитель может выделять и использовать свои ресурсы, не беспокоясь о блокировке.
Что касается индексной связи между вашей задачей, следует отметить, что затем вы можете использовать для этого область в общей памяти и мьютекс для доступа, поскольку она, вероятно, менее тяжелая, чем связь через сокет. Связь дескриптора файла (сокеты, каналы, файлы и т. Д.) Всегда включает в себя ядро, разделяемую память с блокировками мьютекса или семафоры только в случае конфликта.
При программировании с общей памятью в многопроцессорной среде следует учитывать один момент: избегать ложных зависимостей от переменных. Это происходит, когда два несвязанных объекта совместно используют одну и ту же строку кэша. Когда один из них модифицирован, он «загрязняет» и другой, что означает, что, если другой процессор обращается к другому объекту, он запускает синхронизацию кэша между процессорами. Это может привести к плохому масштабированию. Выравнивая объекты по размеру строки кэша (обычно 64 байта, но может отличаться от архитектуры к архитектуре), этого легко избежать.