Можно ли вилить / exec и гарантировать, что один запускается до другой?

в значительной степени как титул говорит. У меня есть фрагмент кода, который выглядит так:

pid_t = p;

p = fork();

if (p == 0) {
    childfn();
} else if (p > 0) {
    parentfn();
} else {
    // error
}

Я хочу убедиться, что либо родитель, либо ребенок выполняется (но не возвращается из) их соответствующих функций до другого.

Что-то вроде звонка для сна (), вероятно, будет работать, но не гарантируется никаким стандартом, и просто будет эксплуатировать деталь реализации планировщика ОС ... это возможно? Работала бы VFork?

Редактировать: оба функция находят свой путь к системе () вызова, один из которых не будет возвращаться, пока другой не будет запущен. Итак, чтобы повторно итерации: мне нужно убедиться, что либо родитель, либо ребенок вызывает только их соответствующие функции (но не возвращается, потому что они не будут, что является то, что все ваши решения на основе Mutex ниже. Есть идеи? Извините за отсутствие ясности.

Редактировать2: Наличие одного процесса вызов SCEN_YIELD и сна, я, кажется, получаю довольно надежные результаты. VFORK предлагает семантику, я ищу, но приходит слишком много ограничений на то, что я могу сделать в дочернем процессе (я могу в значительной степени только вызовов). Итак, я нашел некоторые работы, которые достаточно хороши, но нет реального решения. VFORK, наверное, самая близкая вещь к тому, что я искал, но все решения, представленные ниже, будут работать более или менее.

6
задан user318904 29 August 2012 в 22:38
поделиться