#include"common.h"
int main()
{
int i,zero=1;
int *ptr=&zero;
if(fork()==0)
{
for(i=0;i<100;i++)
{
printf("child: %d\n",(*ptr)++);
}
exit(0);
}
for(i=0;i<100;i++)
{
printf("parent:%d\n",(*ptr)++);
}
exit(0);
}
在没有使用共享内存的时候,输出结果如下:
child: 89
parent:96
child: 90
parent:97
child: 91
parent:98
child: 92
parent:99
child: 93
parent:100
child: 94
child: 95
child: 96
child: 97
child: 98
child: 99
child: 100
使用共享内存:
#include"common.h"
int main()
{
int fd,i,zero=1;
int *ptr;
sem_t *mutex;
char buf[]="mysem";
fd=open("132.txt",O_RDWR|O_CREAT,0777);
write(fd,&zero,sizeof(int)); //把zero写到内存里面去
ptr=mmap(NULL,sizeof(int),PROT_READ|PROT_WRITE,MAP_SHARED,fd,0); //ptr接收被映射区的起始地址,在这里相当于指向zero
close(fd); //映射建立之后就可以关闭文件
mutex=sem_open(buf,O_CREAT|O_EXCL,0666,1);//创建并初始化mysem信号量
sem_unlink(buf); //自动删除信号量
setbuf(stdout,NULL);//关闭缓冲
if(fork()==0)
{
for(i=0;i<100;i++)
{
sem_wait(mutex);//相当于给信号量上锁
printf("child: %d\n",(*ptr)++);
sem_post(mutex); //解锁
}
exit(0);
}
for(i=0;i<100;i++)
{
sem_wait(mutex);
printf("parent:%d\n",(*ptr)++);
sem_post(mutex);
}
exit(0);
}
结果:
hild: 174
child: 175
child: 176
child: 177
child: 178
child: 179
child: 180
child: 181
child: 182
child: 183
parent:184
parent:185
parent:186
parent:187
parent:188
parent:189
parent:190
parent:191
parent:192
parent:193
parent:194
parent:195
parent:196
parent:197
parent:198
parent:199
parent:200