2017-05-01 5 views
0

세마포어로 작업 중이며 일부 코드로 고민하고 있습니다.
CODE :sem_wait()를 사용하는 C 세마포어

// semaphore initialized to zero 
for(int i = 0; i < N; i++) 
{ 
    fork(); 
    // statements 
    sem_wait(semaphore); 
    printf("Process %d is done\n", i); 
    exit(0); 
} 

for(int i = 0; i < N; i++) 
{ 
    sem_post(semaphore); 
} 

문제의 끝에서 그 루프 때문에 sem_wait의 첫번째 반복 이후에 정지하지만 그렇게 다른 반복을 수행 할 수 있으며, 해당 현재 프로세스를 중지하고자하고있다 코드, 나는 모든 프로세스를 발표 할 것이다. 어떻게 이것을 달성 할 수있는 방법이 있습니까?
감사합니다.

편집 :

// initialization of semaphore 
semaphore = mmap(NULL, sizeof(sem_t), PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0); 
sem_init(semaphore, 1, 0); 
+0

우리에게'semarophe' 변수를 어떻게 초기화 시켰는 지 보여주십시오. –

+0

"현재 프로세스"의 의미를 설명 할 수 있습니까? 그 의미를 설명하면, 테스트 할 필요가있는 것을 테스트하는'if' 문에서'sem_wait'에 대한 호출을 감싸기 만하면됩니다. –

+0

음, for 루프에서는'fork()'를 N 번 호출하므로 N 개의 프로세스를 생성합니다. 그래서 현재의 프로세스는 매 반복마다 각 프로세스를 의미합니다. – SevO

답변

1

포크 반환 값을 확인하시기 바랍니다. 이를 바탕으로 코드가 하위 프로세스 또는 상위 프로세스에서 실행되는지 여부를 확인할 수 있습니다. 따라서 sem_wait를 호출하십시오.