get返回共享内存区的ID。对于已经申请到的共享段,进程需把它附加到自己的虚拟空间中才能对其进行读写。4信号量的建立采用semget函数,同时建立信号量的数量。在信号量建立后,调用semctl对信号量进行初始化,例如本实习中,可以建立两个信号量SEM_EMPTY、SEM_FULL,初始化时设置SEM_EMPTY为10,SEM_FULL为0。使用操作信号的函数semop做排除式操作,使用这个函数防止对共享内存的同时操作。对共享内存操作完毕后采用shmctl函数撤销共享内存段。5使用循环,创建2个生产者以及2个消费者,采用函数fork创建一个新的进程。6.一个进程的一次操作完成后,采用函数fflush刷新缓冲区。7.程序最后使用semctl函数释放内存。模拟程序的程序流程图如下所示:1主程序流程图:
f2生产者进程流程图3消费者进程流程图
f4P操作流程图5V操作流程图
f四、实现代码为:
exet5cpp
i
clude