Как я могу создать несколько процессов - PullRequest
0 голосов
/ 05 января 2012

Мне нужно создать 5 процессов (не потоков) и синхронизировать их с семафорами.Алгоритм синхронизации будет что-то вроде «Круглый Робин».Вопрос в том, как создать 5 процессов?Могу ли я сделать это таким образом:

pID = fork();

if(pID < 0) {
    fprintf(stderr, "Fork Failed");
    exit(-1);
}
else if(pID == 0) {
    pID = fork();

    if(pID < 0) {
    fprintf(stderr, "Fork Failed");
    exit(-1);
    }
    else if (pID == 0) {
        pID = fork();

        if (pID < 0) {
            fprintf(stderr, "Fork Failed");
            exit(-1);
        } else if (pID == 0) {
            pID = fork();

            if (pID < 0) {
                fprintf(stderr, "Fork Failed");
                exit(-1);
            } else if (pID == 0) {                    
                /* Process 5 */
                printf("process5 is running... id: %d\n", pID);                    
            } else {
                /* Process 4 */
                printf("process4 is running... id: %d\n", pID);
            }
        } else {
            /* Process 3 */
            printf("process3 is running... id: %d\n", pID);
        }
    }
    else {
        /* Process 2 */
        printf("process2 is running... id: %d\n",pID);
    }
}
else {
    /* Process 1 */
    printf("process1 is running... id: %d\n",pID);

    return (EXIT_SUCCESS);
}

1 Ответ

4 голосов
/ 05 января 2012

Да, но для других было бы легче читать и понимать цикл.

int
call_in_child(void (*function)(void))
{
    int pid = fork();
    if (pid < 0) {
        perror("fork");
        return 0;
    }
    if (pid == 0) {
        (*function)();
        exit(0);
    }
    return 1;
}

, а затем где-нибудь еще

for (i = 0; i < 4; i++) {
    if (! call_in_child(some_function)) {
        ... print error message and die...
    }
}
some_function();

и поместить в вашу программу некоторые функции.1007 *

...