信号量如何解决进程的同步和互斥问题

信号量如何解决进程的同步和互斥问题

操作方法

  • 01

    首先是进程间的两种关系:同步和互斥。所谓同步就是把异步环境下的一组并发进程,因直接制约而互相发送消息二进行互相合作、互相等待,使得各进程按一定的速度执行的过程。互斥是指不允许两个以上的共享该资源的并发进程同时进入临界区。其中直接制约是指一组在异步环境下的并发进程,各自的执行结果互为对方的执行条件,从而限制各进程的执行速度的过程。由于共享某一共有资源而引起的在临界区内不允许并发进程交叉执行的现象,由共享共有资源而造成的对并发进程执行速度的间接制约简称为间接制约。受间接制约的类中各程序段在执行顺序上是任意的。我们将不允许多个并发进程交叉执行的一段程序称为临界区。临界区是由属于不同并发进程的程序段共享公用数据或公用数据变量而引起的。

  • 02

    进程互斥是进程之间发生的一种间接性作用,由两个或两个以上的进程需要同时访问某个共享变量,因竞争共有资源而引起的间接制约带来的。两个进程不能同时进入临界区,否则就会导致数据的不一致,产生与时间有关的错误。进程的同步则是程序共享私有资源造成直接制约。所以为了增强计算机系统的处理能力和提高资源利用率所 采取一种同时操作技术,即程序的并发执行。并发的实质是一个处理器在几个进程之间的多路复用,并发是对有限的物理资源强制行使多用户共享,并且充分发挥硬件的并行性,以提高系统资源的利用率。进程的并发可以调度多个多道程序增加资源的利用率,同时给用户信息的及时响应。如何实现并发进程的互斥?一种可能的办法是对临界区加锁以实现互斥。当某个进程进入临界区之后,它将锁上临界区,直到它退出临界区时为止。不过这种实现方法不能够保证并发进程互斥执行所要求的忙则等待的原则。

  • 03

    信号量是一种软件资源,是最早出现的用来解决进程同步与互斥问题的机制,包括一个称为信号量的变量及对它进行的两个原语操作,每个信号量至少须记录两个信息:信号量的值和等待该信号量的进程队列。 信号量机制的原理。在操作系统中,信号量sem是一整数。在sem大于等于零时代表可供并发进程使用的资源实体数,但sem小于零时则表示正在等待使用临界区的进程数。显然,用于互斥的信号量sem初值应该大于零。信号量数值仅能由P,V原语操作改变。执行一次P操作意味着请求分配一个单位资源,因此S的值减1;当S<0时,表示已经没有可用资源,请求者必须等待别的进程释放该类资源,它才能运行下去。而执行一个V操作意味着释放一个单位资源,因此S的值加1;若S=0,表示有某些进程正在等待该资源,因此要唤醒一  个等待状态的进程,使之运行下去。P,V原语成对出现,在互斥操作时,他们处于同一个进程,但在同步操作时,他们不处于一个进程内。私有信号量是指只与制约进程有关而不是与整组并发进程有关的信号量。利用P,V原语实现进程同步的方法分为三步:首先为各并发进程设置私用信号量,然后为私用信号量赋初值,最后利用P,V原语和使用信号量规定各进程的执行顺序。

  • 04

    解决同步与互斥问题的一些案例:一个吃水果问题。 问题描述:桌上有一只盘子,每次只能放一个水果,爸爸专向盘中放苹果,妈妈专向盘中放桔子,儿子专等吃盘里的桔子,女儿专等吃盘里的苹果。只要盘子空,则爸爸或妈妈可向盘中放水果,仅当盘中有自己需要的水果时,儿子或女儿可从中取出,那么四人之间的同步关系是什么?如何实现四人正确活动的程序? 解:四人之间的关系: 1爸爸,妈妈都要使用盘子,所以两者是互斥关系; 2爸爸放的苹果,女儿吃,所以两者是同步关系; 3妈妈放的桔子,儿子吃,所以两者也是同步关系。 struct semaphore s,sp,so=1,0,0; cobegin void father (void) { while(TRUE){ have an apple;  P(s); put an apple; V(sp);} } void mother (void) { while(TRUE){ have an orange; P(s); put an orange; V(so);} } void son (void) { while(TRUE){ P(sp); get an orange; V(s); eat an orange;} } void daught (void) { while(TRUE){ P(sp); get an apple; V(s); eat an apple;} } coend

  • 05

    信号量机制的总结。信号量机制的优点是:PV操作能够实现对临界区的管理要求;实现简单;允许使用它的代码休眠,持有锁的时间可相对较长。但它的缺点也同样明显:一个信号量只能置一次初值,以后只能对之进行p操作或v操作。由此也可以看到,信号量机制必须有公共内存,不能用于分布式操作系统。

(0)

相关推荐

  • 乐视手机解决照片无法同步lecloud的问题

    乐视手机解决照片无法同步lecloud的问题怎么办呢?接下来小编就教教大家. 操作方法 01 在手机桌面找到"设置"并点击进去. 02 在设置栏找到"lecloud&qu ...

  • 完美解决itunes无法同步及itunes卡死问题

    你是否也经常遇到iTunes卡死以及itunes无法从“同步服务”中载入数据类信息。请重新连接或稍后再试一次的问题呢?下面小编就带领大家一起解决这个问题。 看到QQ管家(每天30分钟你懂的)更新了就直 ...

  • Adobe Dreamweaver CC完美破解补丁amtlib.dll 解决进程CPU占用高问题

    Adobe Dreamweaver CC相对于上一版本CS6,在HTML5和CSS3开发方面强大,而且易用。自从CC今年发布以来,我一直关注它的绿色版或者完美补丁。可惜至今一直没有绿色版完美,所以一直 ...

  • 如何解决GMAIL邮箱同步Z10之后出现的联系人重复问题

    有部分用户在Z10上用GMAIL同步之后出现联系人重复的bug,现在有一种方法可以暂时解决这种问题. 1.首现删除Gmail联系人 2.从屏幕顶部向下滑动 3.选择"设置" 4.选 ...

  • Linux进程通信(IPC)方式简介

    linux下进程间通信的几种主要方式:管道(pipe)和有名管道(FIFO)、信号(signal)、消息队列、共享内存(shared memory)、信号量(semaphore)、套接字(socket ...

  • 百度云管家与同步盘有哪些区别?

    百度云管家与同步盘有哪些区别?

  • Windows时间同步时出错该怎么解决?

    一、解决时间不同步的问题 1、同时按住键盘上的Windows图标和R,调用出运行窗口。 2、在窗口输入栏里,敲入service.msc,然后回车键或者点击一下确定按钮。 3、进入系统的服务窗口,我们需 ...

  • win10内置邮件不能同步怎么办?

    小篇装上win10系统后,发现了一个问题,那就是内置的邮件应用不能同步,针对这个问题,小篇查找资料终于发现问题所在,下面小篇和大家一起分享下小篇的方法: 第一种解决方案,通过Powershell解决 ...

  • 如何使用【QQ同步助手】云端同步通讯录

    现在有很多人喜欢给手机刷机,还有一些人经常喜欢更换手机,不过无论是更换手机或者每次刷机都需要浪费很多时间去备份手机里面的一些资料,比如说通讯录,稍微一不注意,自己就会失去与好朋友的联系方式,想要再去找 ...