첫 번째 프로세스는 두 번째 프로세스가 (i-1) 번째 반복을 완료하지 않는 한 첫 번째 프로세스를 시작하지 않아야합니다. 출력은 내가 필요로하는 것이 아닙니다. 가능한지 궁금합니다. 단 두 개의 세마포어에 의해 출력이 있습니까? 내 코드는 다음과 같습니다.예기치 않은 출력 세마포어
child1: 0
child2: 0
child1: 1
child2: 1
child1: 2
child2: 2
child1: 3
child2: 3
child1: 4
child2: 4
child1: 5
child2: 5
child1: 6
child2: 6
child1: 7
child2: 7
child1: 8
child2: 8
child1: 9
child2: 9
그러나 나는 한 아이를 얻을 :
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>
#include <semaphore.h>
sem_t semA, semB,sem,m;
int main(void)
{
int i;
pid_t child_a, child_b,pid2,pid3;
sem_init(&semA, 0, 1);
sem_init(&semB, 0, 0);
sem_init(&m, 0, 0);
child_a = fork();
//wait();
if (child_a == 0) {
// int j;
pid2 =getpid();
for (i = 0; i < 5;)
{
sem_wait(&semA);
//sem_wait(&m);
printf("child1: %d\n", i);
i++;
//printf("pid1: %d\n", pid2);
//printf("--------------------------\n");
sleep(3);
//sem_post(&m);
sem_post(&semB);
}
}
else {
child_b = fork();
//wait();
if (child_b == 0) {
pid3 =getpid();
for (i = 0; i < 5;)
{
sem_wait(&semB);
//sem_wait(&m);
printf("child2: %d\n", i);
i++;
//printf("pid2: %d\n", pid3);
//printf("--------------------------\n");
sleep(5);
//sem_post(&m);
sem_post(&semA);
}
}
}
exit(0);
return 0;
}
내가 기대 출력은
child1: 0
사용하기 위해서는
코드 프레젠테이션은 치명적인 것입니다. 그런 다음 항상 사용중인 시스템 호출의 매뉴얼 페이지를 읽고 다양한 오류 조건을 이해 한 다음 반환 값을 확인하고 이러한 오류 조건을 캡처하십시오. 항상. –