2012-01-04 3 views
-1

5 개의 프로세스 (스레드가 아닌)를 만들고 세마포어로 동기화해야합니다. 동기화 알고리즘은 "라운드 로빈 (Round Robin)"과 비슷합니다. 질문은 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); 
} 
+2

네, 할 수 있습니다 ... – Saphrosit

답변

4

예.하지만 루프가 읽기 쉽고 이해하기 쉽습니다.

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(); 

및 some_function에서 프로그램의 내장을 넣어.

+0

나는 call_in_child에서도 자식 PID를 반환하는 것을 고려할 것입니다. –

관련 문제