`
tianshibaijia
  • 浏览: 1128433 次
文章分类
社区版块
存档分类
最新评论

进程间同步与互斥---信号量P,V操作

 
阅读更多

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原语实现进程间的互斥与同步

    如何用PV原语实现进程间的互斥与同步 P操作和V操作是不可中断的程序段,称为原语。PV原语及信号量的概念都是由荷兰科学家E.W.Dijkstra提出的。信号量sem是一整数,sem大于等于零时代表可供并发进程使用的资源实体...

    进程间的同步和互斥源代码

    进程间的同步和互斥源代码,不过好像不怎么完整

    C例子:使用信号量进行进程互斥

    该程序是我写的博客“一起talk C栗子吧(第一百零二回:C语言实例--使用信号量进行进程间同步与互斥三)”的配套程序,共享给大家使用

    进程同步——信号量机制

    关于信号量的文章,生产者消费者问题与读者写者问题---信号量机制,PV操作——进程同步的信号量问题,利用信号机制实现的 父子进程同步,嵌入式linux的学习笔记-进程间通信的信号与信号集(四)1)进程的同步与互斥 ...

    操作系统进程间通信实验

    通过对进程间通信同步/互斥问题的编程实现,加深理解信号量和 P、V 操作的原理; 对 Windows 或 Linux 涉及的几种互斥、同步机制有更进一步的了解;熟悉 Windows 或 Linux 中定义的与互斥、同步有关的函数。

    使用信号量和关键段实现多线程的同步与互斥

    用C++实现多线程间的同步和互斥,模拟读者、写者问题,支持一个读者一个写者、多个读者一个写者以及多个读者多个写者间的同步和互斥。

    linux ipc 带有信号量同步互斥方式的进程间通信

    本案例,增加同步互斥院里的 linux间进程之间的通信代码,很有学习的意义

    进程间通信_读者-写者问题.doc

    互斥同步类CMutex和临界区同步类CCriticalSection都是用于保证一个资源一次只能有一个线程访问,二者的不同之处在于前者允许有多个应用程序使用该资源,例如,该资源在一个DLL当中,而后者则不允许对同一个资源的...

    进程间的同步实现读者写者问题

    进程间的同步问题 利用互斥型信号量,实现读者-写者问题。

    操作系统实验:进程通信与进程同步(CTGU)

    (1)加强对进程同步和互斥的理解,学会使用信号量解决资源共享问题。 (2)熟悉Linux 进程同步原语。 (3)掌握信号量wait/signal 原语的使用方法,理解信号量的定义、赋初值及wait/signal操作 二. 实验内容 ■实验4.1 ...

    操作系统pv操作.doc

    在我们研究进程间的互斥的 时候经常会引入这个概念,将P,V操作方法与加锁的方法相比较,来解决进程间的互斥问 题。实际上,他的应用范围很广,他不但可以解决进程管理当中的互斥问题,而且我们 还可以利用此方法解决...

    利用管程_信号量解决生产者消费者问题

    前期主要利用P、V信号量来控制各进程间的同步于互斥关系,确保各进程有序正确的进行。然而,我们也知道,使用信号量和P、V操作在实现进程同步时,对共享资源的管理分散于各个进程中,进程能够直接对共享变量进行处理...

    操作系统期末考试试卷-附答案.doc

    操作系统期末考试试卷-附答案.doc

    多任务操作系统进程和线程同步控制

    需要注意的是临界区在同一线程中可以重复连续的多次进入,它并不像互斥型信号量一样只能进入一次。但进入多少次在线程不需要使用临界区的时候,便需要释放多少次,即enter和leave的个数要相等。否则的话,会阻挠其他...

    pv.rar_pv_pv 锁_信号量pv

    信号量也称为信号锁,主要应用于进程间的同步和互斥,在用于互斥时,通常作为资源锁。信号量通常通过两个原子操作wait(P)和signal(V)来访问。wait操作使信号量的值+1,signal操作使信号量的值-1。本程序模拟了操作...

    生产者-消费者模型模拟进程调度,带报告,课程设计

    2、用信号量机制解决进程(线程)的同步与互斥问题。 二、实验目的 1.掌握基本的同步互斥算法,理解生产者和消费者模型。 2.了解Windows 2000/XP中多线程的并发执行机制,线程间的同步和互斥。 3.学习使用Windows ...

    linux-ipcs:Linux进程间通信(Inter-Process Communication)方式汇总

    其中信号(signal)和信号量(semaphore)本质上并不算是进程间通信方式,应该是进程间同步的方式,但是也可以起到一定的通信作用,故也列在上面。 另外普通的mutex是作用线程间同步用的,但是可以将进程A和进程B共享的...

    生产者消费者_操作系统设计

    前期主要利用P、V信号量来控制各进程间的同步于互斥关系,确保各进程有序正确的进行。然而,我们也知道,使用信号量和P、V操作在实现进程同步时,对共享资源的管理分散于各个进程中,进程能够直接对共享变量进行处理...

    操作系统习题-(1).docx

    互斥信号量mutex,初值为1,表示只能同时登记一个人。 算法描述: P(S); P(mutex); 登记进入。 V(mutex); 阅览。 P(mutex); 登记离开。 V(mutex); V(S); 2、什么是进程间的互斥?什么是进程间...

Global site tag (gtag.js) - Google Analytics