【IO】共享内存、信息量集
1> 使用已经封装好的信号量数组,实现三个进程的同步执行,进程1打印A、进程2打印B,进程3打印C,最终效果是:
ABCABCABCABCABC ...
创建三个.c文件,内容基本一致,只有循环内和删除模块略微不同。
联合编译后,输入1,1,0。
#include <myhead.h>
#include "mysem.h"
#define PAGE_ZISE 4096
int main(int argc, const char *argv[])
{//1.1创建或打开一个信号量数组int semid=sem_create(3);if(semid==-1){return -1;}//1.创建key值key_t key=ftok("/",'m');if(key==-1){perror("key error");return -1;}printf("key =%d\n",key);//2.通过key值创建一个共享内存int shmid=shmget(key,PAGE_ZISE,IPC_CREAT|0664);if(shmid == -1){perror("shmget error");return -1;}//3.将共享内存映射到程序中char *addr=(char *)shmat(shmid,NULL,0);printf("addr=%p\n",addr);//4.向共享内存中放入数据while(1){//2.2 P操作,申请0号灯资源P(semid,0);printf("A\n");sleep(1);V(semid,1);}//断开与共享内存的连接shmdt(addr);//删除共享内存if(shmctl(shmid,IPC_RMID,NULL)==-1){perror("shmctl error");return -1;}//4.4sem_del(semid);return 0;
}
2> 将课堂代码熟练敲两遍
3> 思维导图
4> 牛客网