共享内存1.0(mmap函数)

#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

猜你喜欢

转载自blog.csdn.net/IT8343/article/details/85135501
今日推荐