В значительной степени, как говорится в названии. У меня есть фрагмент кода, который выглядит следующим образом:
pid_t = p;
p = fork();
if (p == 0) {
childfn();
} else if (p > 0) {
parentfn();
} else {
// error
}
Я хочу убедиться, что родитель или дочерний элемент выполняет (но не возвращает из) свои соответствующие функции раньше других.
Что-то вроде вызова sleep (), вероятно, будет работать, но не гарантируется никаким стандартом, и будет просто использовать детали реализации планировщика ОС ... это возможно? Будет ли работать vfork?
edit: Обе функции переходят к вызову system (), одна из которых не вернется, пока не будет запущена другая. Итак, для повторения: мне нужно убедиться, что родитель или потомок только вызывают свои соответствующие функции (но не возвращают, потому что они не будут, что и предлагают все решения на основе мьютекса ниже) перед другим. Есть идеи? Извините за отсутствие ясности.
edit2: Имея один вызов процесса sched_yield и sleep, я, похоже, получаю довольно надежные результаты. vfork обеспечивает семантику, которую я ищу, но имеет слишком много ограничений на то, что я могу сделать в дочернем процессе (я могу в значительной степени только вызвать exec). Итак, я нашел несколько обходных путей, которые достаточно хороши, но не имеют реального решения. vfork, вероятно, ближе всего к тому, что я искал, но все представленные ниже решения будут работать более или менее.