Э-э, это почти то, что vfork()
делает в Linux, он разделяет память родителя (но не разделяет остальное, что потоки должны совместно использовать).
Поскольку разделение памяти родителя приводит к проблемам, о которых говорилось в комментариях к вашему вопросу (и к некоторым другим проблемам), родительский vfork()
фактически приостанавливается до тех пор, пока ребенок не отбросит все ссылки на эту память, обычно через execve()
или _exit()
(обратите внимание на подчеркивание, exit()
небезопасно для vfork()
ребенка).
Только вещи, которые ребенок vfork()
может безопасно делать, вызывают exec*()
или _exit()
. Обладая большими знаниями и магией черного вуду, некоторые люди могут делать больше вещей для vfork()
ребенка в Linux, но это требует большого внимания к деталям.
Итак, как вы можете видеть, есть много ограничений на то, что вы можете делать, когда делитесь памятью и возвращаете fork()
: есть очень веская причина, почему создание потока обычно выполняется путем вызова функция .