进程间通信-信号量
2016-04-15 22:03
190 查看
信号量:它描述了当前某种资源的数量。它的意图在于进程间同步,就相当于一个计数器,它本身不具有数据交换的功能,而是通过控制其他通信资源来实现进程间通信。
当一个进程要访问临界资源时,先要进行P操作申请资源,当大于0时,资源可以请求,申请过后,若为0,则将进程挂起;当进程不再访问该信号量控制的资源时,进行V操作,若有进程挂起,则唤醒该等待的进程继续恢复访问,如果无挂起进程,就给它加1。
进程间同步:对临界资源的访问带有顺序性的,一个执行完毕,另一个才可以执行。
注意:对信号量的操作均为原子操作,因为信号量的主要作用就是维护资源的互斥或多进程的同步访问,而在信号量的初始化和创建中均不能保证其原子操作。
创建信号量:semget(key_t key,int nsems,int semflg);
P,V操作:
semop(int semid,struct sembuf* buf,unsigned nsops);//对当前信号量集上的第几个信号量进行P/V操作
释放信号量:semctl(int semid ,int semnue,int cmd)//对当前信号量集上的第几个信号量进行cmd指令操作。
union semun {
int val; // 使用的值
struct semid_ds *buf; // IPC_STAT、IPC_SET 使用缓存区
unsigned short *array; // GETALL,、SETALL 使用的数组
struct seminfo *__buf; // IPC_INFO(Linux特有) 使用缓存区
};
comm.h
comm.c
test.c
运行结果:
当一个进程要访问临界资源时,先要进行P操作申请资源,当大于0时,资源可以请求,申请过后,若为0,则将进程挂起;当进程不再访问该信号量控制的资源时,进行V操作,若有进程挂起,则唤醒该等待的进程继续恢复访问,如果无挂起进程,就给它加1。
进程间同步:对临界资源的访问带有顺序性的,一个执行完毕,另一个才可以执行。
注意:对信号量的操作均为原子操作,因为信号量的主要作用就是维护资源的互斥或多进程的同步访问,而在信号量的初始化和创建中均不能保证其原子操作。
创建信号量:semget(key_t key,int nsems,int semflg);
P,V操作:
semop(int semid,struct sembuf* buf,unsigned nsops);//对当前信号量集上的第几个信号量进行P/V操作
释放信号量:semctl(int semid ,int semnue,int cmd)//对当前信号量集上的第几个信号量进行cmd指令操作。
union semun {
int val; // 使用的值
struct semid_ds *buf; // IPC_STAT、IPC_SET 使用缓存区
unsigned short *array; // GETALL,、SETALL 使用的数组
struct seminfo *__buf; // IPC_INFO(Linux特有) 使用缓存区
};
comm.h
comm.c
test.c
运行结果:
相关文章推荐
- SQL2005 性能监视器计数器错误解决方法
- C#实现子窗体与父窗体通信方法实例总结
- 自学成才的秘密:115个 web Develop 资源
- SQL Server中的Forwarded Record计数器影响IO性能的解决方法
- MySQL中实现高性能高并发计数器方案(例如文章点击数)
- java和c#使用hessian通信的方法
- win32下进程间通信(共享内存)实例分析
- WinForm实现跨进程通信的方法
- C#中使用UDP通信实例
- C#中使用资源的方法分析
- ASP.NET UserControl 通信的具体实现
- Shell脚本实现Linux系统和进程资源监控
- 坏狼php学习 计数器实例代码
- Android资源命名规范 分享
- 浅析iOS应用开发中线程间的通信与线程安全问题
- C#使用Dispose模式实现手动对资源的释放
- PHP多线程编程之管道通信实例分析
- flex与js通信与彼此之间的互调整理(一)
- .net非托管资源的回收方法
- php实现计数器方法小结