C에서 세마포어로 연습하고 있습니다. 클래스 노트에서 예제를 복제하려고 바보 프로그램을 작성했습니다. 다음 코드 조각 (gcc -o ex3 ex3.c -lpthread)을 컴파일하고 실행 (./ex3)하면 아무 일도 일어나지 않습니다.C에서 세마포어로 더미 프로그램을 구현
#include <semaphore.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
sem_t S1;
sem_t S2;
sem_t S3;
int main(){
int fa=4;
int fb=2;
int sum=0;
sem_init(&S1, 0, 1);
sem_init(&S2, 0, 0);
sem_init(&S3, 0, 0);
/* Proceso A*/
while (fa<4)
{
sem_wait(&S1);
sum = sum + 2;
sem_post(&S2);
fa++;
}
/* Proceso B*/
while (fb<2)
{
sem_wait(&S2);
sem_wait(&S2);
sum = sum + 3;
sem_post(&S3);
fb++;
}
/* Proceso C*/
while (1)
{ /* Imprimir */
sem_wait(&S3);
printf("%d,", sum);
sem_post(&S1);
sem_post(&S1);
if (fa>4 && fb>2)
exit(0);
}
return 0;
}
내 생각은 조금 더 나은이 세마포어가 무엇을 이해하기 위해 추가 대기하고 A와 B를 처리하는 신호를 재생하는 것입니다. 그러나 전에 결과를 볼 필요가 있습니다. D
도움이 될만한 의견이 있습니다.