进程间通信方式(二)信号量
来源:互联网 发布:韦德上赛季场均数据 编辑:程序博客网 时间:2024/06/01 08:43
信号量
一.基本概念的解释
1.信号量:同一时刻只有一个进程可以对临界区域的访问。俗话说相当于一个计数器(计数器记录着有几个进程可以使用),0代表阻塞,1代表执行。
2.临界资源:同一时间只能被一个进程所使用的资源。ey:打印机
临界区:进程访问临界资源的代码区域。
3.原子操作:任何情况下都不能被打断的操作。
4.内核对象:用于对进程间通讯时,多进程能够访问同一资源的记录。
5.信号量的作用:进程间同步控制。(多进程访问临界资源时有顺序,一个执行,其余的处于等待状态,同样锁也是这样的,但是当使用锁时其它进程不能将其终端,但信号量可以)
二.有关信号量的函数
(1)semget(key_t key,int num_sems,int sem_flags);//成功返回一个正数,它为信号量标识符,失败则返回-1,(初始化或创建函数)
Key:信号量键,由此生成一个信号量标识符
num_sems:信号量数目,一般为1
Sem_flags:访问权限,一般为0664,如果没有信号则需要创建时要或上IPC_CREAT.
(2)int semop(int sem_id,struct *sem_ops,size_t num_sem_ops);
//用于改变信号量的值(P,V操作)
sem_id:信号量标识符
sem_ops:结构数组指针
结构为:struct sembuf{
short sem_num;//信号编号,一般为0
short sem_op;//一般-1为P操作,1为V操作
short sem_flg;//通常为SEM_UNDO,用于跟踪信号量的修改情况,如果进程终止但没有释放该信号量,则操作系统会自动释放该信号量
}
(3)int semctl(int sem_id,int sem_num,int command,...);//用来直接控制信号量信息(删除)
Sem_id:semget返回的信号量标识符
Sem_num:信号量编号,一般取0,表示第一个信号量
Command:将要采取的动作,有两种可能SETVAL将信号初始化为一个已知的值,一般为联合体的val,IPC_RMID:用于删除一个已经无需继续使用的信号量标识符。
最后一个为union semun结构:
Union semun{
Int val;
Struct semid_ds *buf;
Unsigned short *array;
}
总结完知识点后,自己为了更加理解信号量,则写了一个题,题为A进程发送OK,后B进程打印100以内的素数,自己所写代码如下
注:为了方便将信号量的创建,修改,删除用函数进行了封装。
sem.c
A进程
B进程
执行结果:
pa为A进程的可执行文件,pb为B进程的可执行文件
- 进程间通信方式(二)信号量
- 进程间通信(二)----信号量
- 进程间的通信---(二)信号量
- 进程间通信方式——信号量(Semaphore)
- 进程间通信:通俗理解信号量方式
- 进程间通信方式之信号量
- Linux进程间通信(二)之信号量
- 进程间通信机制之二:信号量
- Linux中的进程通信(二)--信号量
- 进程间通信(信号量通信)
- 进程间的通信方式(二)
- 进程间通信方式(二)
- 进程间通信 信号量
- 进程间通信--信号量
- 进程间通信-信号量
- 进程间通信-信号量
- 进程间通信--信号量
- 【进程间通信】信号量
- Java4Android笔记之Java中的面向对象基础(三)
- Linux搭建主从复制
- 【BZOJ1096】【ZJOI2007】仓库建设(斜率优化,动态规划)
- nyoj 119 士兵杀敌(三)线段树
- MySQL数据表基本
- 进程间通信方式(二)信号量
- 【Android】获取所有jpg和png图片
- 2017-10-22 HDU 2082 普通型母函数
- Help Hanzo(区间求素数) LightOJ
- 10.20校内ACM G题站队
- 476. Number Complement
- JS制作简单的三级联动
- stm32F4系列出现HardFault_Handler解决方法
- nitoj_202_二分——将区间分为三个部分