进程间同步与互斥---信号量P,V操作
来源:互联网 发布:mac pretty boy好看吗 编辑:程序博客网 时间:2024/05/22 14:55
1. 信号量基本术语
现代计算机系统中,多个进程可以并发执行,进程间必然存在共享资源和相互合作的问题。
同步主要是用户多个进程相互协作,共同完成任务,是进程间的直接制约问题;互斥则主要是为了多个进程分时使用有限的资源。
信号量(semaphore)是1965年由荷兰人Dijkstra提出的一种卓有成效的进程间同步及互斥工具。信号量在操作系统中实现时一般作为一个整数变量,这种信号量称为整型信号量。信号量S的物理意义:
S >= 0表示某资源的可用数;
S<0 其绝对值表示阻塞队列中等待该资源的进程数目;
信号量的两个操作方法是PV,P操作为S=S-1;表示申请一个资源,V操作为S=S+1;表示释放一个资源。因为对整数的加减1操作是在一个指令完成的,而硬件能够保证中断只能发生在指令之间,所以PV操作不会被中断打扰执行结果。
P
{
S = S-1;
if(s<0)
Wait(S); --------当前进程进入等待队列等待
}
V
{
S=S+1;
if(S<=0)
Resume(S); ----------唤醒等待队列中的一个进程
}
2.利用信号量实现互斥
初始化信号量mutex = 1; 当进程进入临界区时执行P操作,退出临界区时执行V操作。
P(mutex)
临界区代码;(操作互斥资源)
V(mutex)
3. 利用信号量实现同步
此时可以把信号想象成代表一个消息。当S=0表示表示消息未产生;当S>0则表示消息已经产生。例如:
(1)单缓冲区的生产者和消费者问题。
生产者进程P1不断地生产产品送入缓冲区,消费者进程P2不断地从缓冲区中提取产品消费。为了实现P1与P2进程间的同步,需要设置一个信号量S1,并且初始化为1,表示缓冲区为空,可以将产品放入缓冲区中;还需要设置另一个另一个信号量S2,初始值为0,表示缓冲区没有产品,可以提取消费。
P1:生产一个产品--->P(S1)测试缓冲区是否为空----->产品送缓冲区---->V(S2)设置有产品---->重复
P2: P(S2)测试是否有产品----->从缓冲区取出产品------->V(S1)设置缓冲区为空------->消费--->重复
(2)多缓冲区同步问题
设有一个生产者和一个消费者,缓冲区可以存放n件物品,生产者不断地生产产品,消费者不断地消费产品。
设置3个信号量,S, S1,S2。其中S是一个互斥信号量初值为1,对缓冲区资源进行互斥控制,S1表示是否可以将物品放入缓冲区,初值为n,S2表示缓冲区中是否有物品,初值为0。同步过程如下:
P1:生产一个产品----->P(S1)--->P(S)--->产品送缓冲区--->V(S)---->V(S2)
P2:P(S2)------>P(S)--->从缓冲区取出一个产品----->V(S)----->V(S1)----->消费
附上在Windows和Unix平台使用信号量的源码:
- 进程间同步与互斥---信号量P,V操作
- 进程同步---生产者与消费者问题以及进程同步机制--信号量及P、V操作
- 如何用P V原语实现进程间的互斥与同步
- 信号量同步-P V 操作
- Linux系统编程——进程同步与互斥:System V 信号量
- 【Linux系统编程】进程同步与互斥:System V 信号量
- Linux系统编程——进程同步与互斥:System V 信号量
- PV操作、信号量、同步与互斥
- 进程间通信——信号量(P、V操作)
- Linux互斥与同步应用(五):system V信号量的互斥与同步
- 【操作系统】信号量与P、V操作
- 信号量P/V操作
- 用信号量解决进程的同步与互斥探讨
- 用信号量解决进程的同步与互斥探讨
- 进程同步与互斥:POSIX有名信号量
- 用信号量解决进程的同步与互斥
- 进程同步与互斥:POSIX有名信号量
- linux 命名信号量实现进程间的互斥与同步
- [香港] Lenovo LePhone 第三、四季在港推出?
- What is the working set, commit, and private working set memory size?
- struts2标签学习
- c/c++ 内存对齐 sizeof
- 5.18Ruby的大致了解
- 进程间同步与互斥---信号量P,V操作
- OCP认证考试指南(1):Oracle的基本概念
- kermit config files
- Linux2.6.33 自己动手写驱动
- VC利用http远程下载文件
- C++中自己定义函数对象
- webkit cygwin build
- 关于对象的转型
- enum类型的本质