1
다른 프로세스를 포크하는 프로그램을 작성하려고하는데 첫 번째 프로세스가 (i-1) 번째 프로세스가 완료 될 때까지 첫 번째 프로세스가 (i) th 반복. 2 개의 세마포어만으로 가능합니까?예기치 않은 출력 세마포어
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
[예상치 못한 출력 실행 세마포] 가능한 복제본 (http://stackoverflow.com/questions/16549718/unexpected-output-running-semaphore) – Mat
** 교차 게시하지 마십시오 **. 그런 다음 한 사이트에서 중복 질문이 생깁니다. 그것은 전혀 최적이 아니며 모든 사람의 시간을 낭비합니다. 하나의 사이트를 선택하십시오. 잘못된 사이트를 선택했다면 마이그레이션을 요청하십시오 (게시물에 플래그를 지정하고 "기타"텍스트 상자에서 원하는 것을 설명 함). – Mat
'718은 (는) 이미 939의 복제본으로 폐쇄되어 있기 때문에이 (SO 16549939)는 SO 16549718과 중복 될 수 없습니다. –