부모 프로세스가 있고 3 개의 하위 프로세스를 만들고 싶은 프로그램이 있습니다.읽기 - 쓰기 공유 메모리
또한 각 공유 메모리에 대해 2 개의 공유 메모리 (IN, OUT)와 1 개의 세마포어를 만들었습니다.
아이디어는 다음과 같습니다
는부모 프로세스는 3 개 정수를 가지고 있으며, 공유 메모리 (IN)이 정수 중 하나에 쓸 수있다. 그런 다음 자식 프로세스 중 하나가이를 읽고 일부 계산을 수행하고 부모가 결과를 읽는 공유 메모리 (OUT)에 내용을 씁니다. 그런 다음 부모 프로세스가 공유 메모리에 다음 정수를 추가하고 등등 ..
이 내가 첫 번째 부분을 구현하려고 내 코드의 일부는 (공유 메모리 IN에서 쓰기 읽기) :
// create and attach shared memory
memidIN = shmget(...);
memidOUT= shmget(...);
pointerIN = (...) shmat(...);
pointerOUT = (...) shmat(...);
// create and init semaphores
semIN = semget(...);
semOUT = semget(...);
semctl(semIN, ...); // initialize both to 1
semctl(semOUT, ...);
for (i = 0; i < children; ++i)
{
pid = fork();
if (pid)
{
// parent process code
down sem_IN
write in shmIN
up sem_IN
}
else if (pid == 0)
{
// Children processes code
down sem_IN
read from shmIN
up sem_IN
exit(0);
}
else
//ERROR
}
// dont die until childrens die
for(j = 0; j < children; j++)
wait(&status);
질문은 어떻게 아이들 프로세스가 올바른 값을 읽는지 확신 할 수 있습니까? 내 말은 부모 프로세스가 5를 쓰면 하나의 프로세스가 그것을 취해야하고, 뭔가를하고, OUT에 뭔가를 써야합니다. 그런 다음 부모는 다른 값을 써야합니다. 10을 말하십시오. 내 프로그램에서 2 번 이상 자식 프로세스가 읽을 수 있습니다.
뮤텍스 세마포어를 사용하여 하위 프로세스가 올바른 값을 읽고 하위 프로세스 중 하나가 값을 읽었을 때 부모 프로세스가 값을 업데이트하는지 확인해야합니까?
아이디어가 있으십니까?