Выделить память в родительском. Используйте эту память как в родительском, так и в Child. Предоставьте освобождение памяти родительскому объекту. Сделать родительский wait (wait системный вызов) дочернего элемента. Родитель освобождает память перед выходом.
В качестве альтернативы быть на более безопасной стороне, прежде чем ребенок выйдет, проверьте, жив ли он или нет. Если нет, освободите память у самого ребенка. Но это не сработает, если может быть несколько дочерних.
Вы можете использовать первые несколько бит памяти для отслеживания количества процессов, использующих эту память. Всякий раз, когда процесс начинает использовать память, он увеличивает этот счет, и до выхода из него уменьшается значение count.Plus, если счетчик становится 0, освободите память.
Существует еще один метод. Создайте функцию ownMalloc, которая находится поверх системного malloc (или в зависимости от того, какую функцию вы используете). Это отслеживает всю выделенную память, а также процессы, которые ее используют. Он периодически проходит через разные выделенные куски и освобождает кусок, который не используется.
Извините, это небольшая и важная часть моего программного обеспечения, и мне нужно иметь возможность обмениваться наборами данных как можно быстрее. И я не боюсь о параллелизме и условиях гонки. Я люблю высокоскоростное параллельное программирование. Но здесь я должен вызвать внешний дочерний процесс, так как он может загружать небезопасные плагины, которые не должны были бы разбивать основное приложение. – Lothar
Похоже, вы на вершине вещей, и статья, с которой я связан, будет иметь смысл. Вы в конечном итоге скопируете все, что родительский читает из общего буфера, в буфер, закрытый для родителя, а затем, конечно, проверьте его. И в какой-то момент вы попытаетесь сделать в userland то, что ядро делает для вас с помощью труб, и вы, возможно, не найдете трубы настолько медленными. – Will