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平台使用信号量的源码:
分享到:
相关推荐
如何用PV原语实现进程间的互斥与同步 P操作和V操作是不可中断的程序段,称为原语。PV原语及信号量的概念都是由荷兰科学家E.W.Dijkstra提出的。信号量sem是一整数,sem大于等于零时代表可供并发进程使用的资源实体...
进程间的同步和互斥源代码,不过好像不怎么完整
该程序是我写的博客“一起talk C栗子吧(第一百零二回:C语言实例--使用信号量进行进程间同步与互斥三)”的配套程序,共享给大家使用
关于信号量的文章,生产者消费者问题与读者写者问题---信号量机制,PV操作——进程同步的信号量问题,利用信号机制实现的 父子进程同步,嵌入式linux的学习笔记-进程间通信的信号与信号集(四)1)进程的同步与互斥 ...
通过对进程间通信同步/互斥问题的编程实现,加深理解信号量和 P、V 操作的原理; 对 Windows 或 Linux 涉及的几种互斥、同步机制有更进一步的了解;熟悉 Windows 或 Linux 中定义的与互斥、同步有关的函数。
用C++实现多线程间的同步和互斥,模拟读者、写者问题,支持一个读者一个写者、多个读者一个写者以及多个读者多个写者间的同步和互斥。
本案例,增加同步互斥院里的 linux间进程之间的通信代码,很有学习的意义
互斥同步类CMutex和临界区同步类CCriticalSection都是用于保证一个资源一次只能有一个线程访问,二者的不同之处在于前者允许有多个应用程序使用该资源,例如,该资源在一个DLL当中,而后者则不允许对同一个资源的...
进程间的同步问题 利用互斥型信号量,实现读者-写者问题。
(1)加强对进程同步和互斥的理解,学会使用信号量解决资源共享问题。 (2)熟悉Linux 进程同步原语。 (3)掌握信号量wait/signal 原语的使用方法,理解信号量的定义、赋初值及wait/signal操作 二. 实验内容 ■实验4.1 ...
在我们研究进程间的互斥的 时候经常会引入这个概念,将P,V操作方法与加锁的方法相比较,来解决进程间的互斥问 题。实际上,他的应用范围很广,他不但可以解决进程管理当中的互斥问题,而且我们 还可以利用此方法解决...
前期主要利用P、V信号量来控制各进程间的同步于互斥关系,确保各进程有序正确的进行。然而,我们也知道,使用信号量和P、V操作在实现进程同步时,对共享资源的管理分散于各个进程中,进程能够直接对共享变量进行处理...
操作系统期末考试试卷-附答案.doc
需要注意的是临界区在同一线程中可以重复连续的多次进入,它并不像互斥型信号量一样只能进入一次。但进入多少次在线程不需要使用临界区的时候,便需要释放多少次,即enter和leave的个数要相等。否则的话,会阻挠其他...
信号量也称为信号锁,主要应用于进程间的同步和互斥,在用于互斥时,通常作为资源锁。信号量通常通过两个原子操作wait(P)和signal(V)来访问。wait操作使信号量的值+1,signal操作使信号量的值-1。本程序模拟了操作...
2、用信号量机制解决进程(线程)的同步与互斥问题。 二、实验目的 1.掌握基本的同步互斥算法,理解生产者和消费者模型。 2.了解Windows 2000/XP中多线程的并发执行机制,线程间的同步和互斥。 3.学习使用Windows ...
其中信号(signal)和信号量(semaphore)本质上并不算是进程间通信方式,应该是进程间同步的方式,但是也可以起到一定的通信作用,故也列在上面。 另外普通的mutex是作用线程间同步用的,但是可以将进程A和进程B共享的...
前期主要利用P、V信号量来控制各进程间的同步于互斥关系,确保各进程有序正确的进行。然而,我们也知道,使用信号量和P、V操作在实现进程同步时,对共享资源的管理分散于各个进程中,进程能够直接对共享变量进行处理...
互斥信号量mutex,初值为1,表示只能同时登记一个人。 算法描述: P(S); P(mutex); 登记进入。 V(mutex); 阅览。 P(mutex); 登记离开。 V(mutex); V(S); 2、什么是进程间的互斥?什么是进程间...