Рассмотрим Foo
, который содержит некоторый ресурс
struct Foo
{
~Foo();
};
и глобальный std::vector<Foo>
. Возможно, глупый пример, но он хорошо иллюстрирует проблему.
std::vector<Foo> bar;
Теперь процессы fork
s.
Если bar
изменяется толькодочерний процесс, а затем вызов exit
должен быть правильным в дочернем процессе. При вызове _exit
любой Foo
: s в баре будет просачиваться. Если родитель добавил некоторые вещи в bar
до разветвления, эти объекты могут быть уничтожены дважды. Или, может быть, это не проблема, потому что они должны рассматриваться как разные объекты.
Как правильно обращаться с временем жизни объекта вместе с fork
. Является ли единственным разумным способом решения этих проблем позволить ребенку exec
и начать все сначала?
Я должен заметить, что на этом этапе в программе гарантированно будет только один поток.