编程实现生产者和消费者共享存储区功能。生产者随机产生10个整型数据,写入共享存储区;消费者读出数据,并进行平方和平方根运算后输出。使用系统调用shmget()、shmat()、sgmdt()、shmctl()等, 实现程序。
生产者:
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdlib.h>
#include <stdio.h>
#define KEY 75
#define K 1024
main()
{int shmid, *p, i;
char * shmaddr;
shmid=shmget(KEY,K,0777|IPC_CREAT);
shmaddr=shmat(shmid,0,0);
p=(int *) shmaddr;
for(i=0;i<10;i++)
{ *p = rand()%100;
sleep(1);
printf("%d\n",*p);
p++;
}
sleep(5);
shmdt(shmaddr);
shmctl(shmid,IPC_RMID,0);
printf("end\n");
}
消费者
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdlib.h>
#include <stdio.h>
#define KEY 75
#define K 1024
main()
{int mid,*q, *t, i,num;
char *maddr;
mid=shmget(KEY,K,0777);
maddr=shmat(mid,0,0);
q=(int *)maddr;
sleep(6);
for(i=0;i<10;i++)
{
num=(*q)*(*q);
printf("%d\n",num);
q++;
num=0;
}
shmdt(maddr);
shmctl(mid,IPC_RMID,0);
}