您好,欢迎访问三七文档
示例:#includesys/types.h#includesys/ipc.h#includestdio.h#includesys/shm.h#defineSHMKEY75intshmid,i;int*addr;main(){intserver,client;while((server=fork())==-1);if(server==0){shmid=shmget(SHMKEY,1024,0777|IPC_CREAT);addr=shmat(shmid,0,0);do{*addr=-1;while(*addr==-1);printf((server)received\n);}while(*addr);shmctl(shmid,IPC_RMID,0);exit(0);}while((client=fork())==-1);if(client==0){shmid=shmget(SHMKEY,1024,0777);addr=shmat(shmid,0,0);for(i=9;i=0;i--){while(*addr!=-1);printf((client)sent\n);*addr=i;}exit(0);}wait(0);wait(0);}结果运行的结果和预想的格式一样。但在运行的过程中,发现第当CLIENT发送一次数据后,SERVER要等待大约0.1秒才有响应。同样,之后CLIENT又需要等待约0.1秒才发送下一个数据。分析出现上述的应答延迟的现象是程序设计的问题当CLIENT端了送了数据后,并没有任何措施通知SERVER端数据已经发出,需要由CLIENT查询才能感知。此时,CLIENT端并没有放弃系统的控制权,仍然占用CPU的时间片。只有当系统进行调度时,切换到了SERVER进程,再进行应答。这个问题,也同样存在于SERVER端到CLIENT的应答过程之中。
本文标题:共享存储区通信
链接地址:https://www.777doc.com/doc-2665154 .html