我有一个程序,我有一个父进程,我想创建3个子进程。读写共享内存
我也为每个共享内存创建了2个共享内存(IN,OUT)和1个信号量。
的理念是:
父进程具有3点的整数,并且在共享存储器(IN)这些整数中的一个来写。然后,其中一个子进程读取它,执行一些计算,并在共享内存(OUT)中写入父母读取结果的位置。然后父进程增加了下一个整数共享内存等..
这是我的代码部分在那里我尝试工具的第一部分(从共享内存写 - 读):
// 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。 在我的程序中5可以被子进程读取2次或更多次。
我应该使用互斥信号量来确保子进程读取正确的值并确保父进程在其中一个子进程读取它时更新该值吗?
任何想法?