Unix IPC之基于共享内存的计数器
2015-08-18 14:50
585 查看
目的
本文主要实现一个基于共享内存的计数器,通过父子进程对其访问。
本文程序需基于<<Unix网络编程-卷2>>的环境才能运行。程序中大写开头的函数为其小写同名函数的包裹函数,增加了错误处理信息。
1 函数介绍
2 计数器——非共享内存
默认情况下,通过fork派生的子进程并不与其父进程共享内存区。
由于子进程为父进程的拷贝,所以子进程自己有一个count的副本,所以父子进程操作自己的count。这里使用一个有名信号量来同步父子进程。
3 计数器——共享内存
程序说明:
View Code
说明:服务器运行一个实例;客户端运行多个实例,实例之间互斥对计数器进行+1操作;
来自为知笔记(Wiz)
本文主要实现一个基于共享内存的计数器,通过父子进程对其访问。
本文程序需基于<<Unix网络编程-卷2>>的环境才能运行。程序中大写开头的函数为其小写同名函数的包裹函数,增加了错误处理信息。
1 函数介绍
默认情况下,通过fork派生的子进程并不与其父进程共享内存区。
3 计数器——共享内存
程序说明:
#include "unpipc.h" struct shmstruct /* struct stored in shared memory */ { int count; }; sem_t *mutex; /* pointer to named semaphore */ int main(int argc, char **argv) { int fd, i, nloop; pid_t pid; struct shmstruct *ptr; // 注意这里的指针类型 if (argc != 4) err_quit("usage: client1 <shmname> <semname> <#loops>"); nloop = atoi(argv[3]); fd = Shm_open(Px_ipc_name(argv[1]), O_RDWR, FILE_MODE); ptr = Mmap(NULL, sizeof(struct shmstruct), PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); Close(fd); mutex = Sem_open(Px_ipc_name(argv[2]), 0); pid = getpid(); for (i = 0; i < nloop; i++) { Sem_wait(mutex); printf("pid %ld: %d\n", (long) pid, ptr->count++); Sem_post(mutex); } exit(0); }
View Code
说明:服务器运行一个实例;客户端运行多个实例,实例之间互斥对计数器进行+1操作;
来自为知笔记(Wiz)
相关文章推荐
- Surrounded Regions
- xmodem, ymodem & zmodem
- PHP关于时区的设置
- Sql语句中的DDL、DML、DCL的介绍
- iOS 后台持续定位
- swift学习1
- 遍历接口参数,自动计算url并进行签名
- matla图像处理基本操作
- CTS Verifier NFC Test
- 在Apache Spark上跑Logistic Regression算法
- Android 拨打电话流程
- 如何修改归档路径
- 遍历接口参数,自动计算url并进行签名
- 微信开发入门指南
- Android - 日期类的使用
- 深搜玩转数独
- error LNK2005: _sprintf 已经在 MSVCRTD.lib(MSVCR90D.dll) 中定义
- JQuery实现滑动开关效果
- css -- 运用@media实现网页自适应中的几个关键分辨率
- MBR初识