semaphores and shared memory
I have a problem with shared memory synchronization. I have 3 processes, A B and C, and 2 shared memory zones. Process A read from both memory zones, process B write a number in the first memory zone, process C write a number in the second memory zone.
This process is repeated 10-15 times.
I used 2 binary semaphores, for synchronization. Process B and C write the numbers in the shared memory zones 15 times, but process A reads only the last two numbers 15 times. I suppose the problem is that process C and B doesn’t wait for process A to finished.
The part of code which realize this is the following:
// i use an another file, caled "semb.c", where i define a binary semaphore, with its operations
//for the semaphore i include <sys/sem.h>
//semid1-id of the first semaphore
//semid2-id of the second semaphore
//P-lock operation
//V-unlock operation
int rc=0; //reader count
if (fork()>0)
{
//process A
for (i=0;i<15;i++)
{
rc=0;
P(semid2);
rc++;
if (rc==1)
{
P(semid1);
}
V(semid2);
printf("the numbers are: %d %d .\n",ad1->nr,ad2->nr);
P(semid2);
rc=rc-1;
if (rc==0)
{
V(semid1);
}
V(semid2);
}
}
else
{
if (fork()>0)
{
//process B
for (i=0;i<15;i++)
{
P(semid1);
ad1->nr=rand()%30;//ad1 second shared memory zone
printf("B write: %d \n",ad1->nr);
V(semid1);
}
}
else
{
//process C
for (i=0;i<15;i++)
{
P(semid1);
ad2->nr=rand()%60;//ad2 second shared memory zone
printf("C write: %d \n",ad2->nr);
V(semid1);
}
}
}
Last edited by beata86; 11-23-2006 at 04:39 AM.
|