进程同步
实现一个简单的进程同步程序
#include <stdio.h>
#include <unistd.h>
#include <sys/mman.h>
#include <semaphore.h>
int *pbuff=0;
sem_t *s1,*s2;
int main()
{
//printf("Hello World!\n");
int pid=0;
int tc,tf;
pbuff=(int *)mmap(0,sizeof(int),PROT_READ|PROT_WRITE,
MAP_SHARED|MAP_ANON,-1,0);
s1=(sem_t *)mmap(0,sizeof(sem_t),PROT_READ|PROT_WRITE,
MAP_SHARED|MAP_ANON,-1,0);
s2=(sem_t *)mmap(0,sizeof(sem_t),PROT_READ|PROT_WRITE,
MAP_SHARED|MAP_ANON,-1,0);
*pbuff=0;
sem_init(s1,1,1);
sem_init(s2,1,0);
pid=fork();
if(pid==0)
{
l: tc=*pbuff;
tc++;
sem_wait(s1);
*pbuff=tc;
sem_post(s2);
if(tc>=10)
return 0;
else goto l;
}
else if(pid>0)
{
L: sem_wait(s2);
tf=*pbuff;
sem_post(s1);
if(tf>0)
printf("%d\n",tf);
if(tf==10)
return 0;
else goto L;
}
return 0;
}

浙公网安备 33010602011771号