精华内容
下载资源
问答
  • 针对工程经济给出寿命期不等的互斥方案求解的诸解法之间关系问题,基于买方原则,证明互斥方案的多种解法具有内在一致性。证明结果表明,各种解法的解导致相同的选择,以短期寿命方案为研究期计算净现值比较,不需要...
  • 临界区的硬件互斥方案

    千次阅读 2013-08-02 11:31:16
    临界区互斥的硬件解决 基本硬件机制包括禁止中断、Test-and-Set指令、Swap指令。 1、禁止中断  这是最简单的方法,进程一旦进入临界区就禁止一切中断,在离开临界区前放开中断,但是该方案有如下致命的弱点...
    临界区互斥的硬件解决

    基本硬件机制包括禁止中断、Test-and-Set指令、Swap指令

    1、禁止中断

       这是最简单的方法,进程一旦进入临界区就禁止一切中断,在离开临界区前放开中断,但是该方案有如下致命的弱点:


    将禁止一切中断的权利赋予普通用户,若用户没有开放中断,系统的正常运行将受到影响。

    不适合于多处理机系统,因为一个进程只能禁止本CPU的中断,其它CPU上的进程仍然会使用互斥资源。

    2、Test-and-Set指令

       (读和写在一条指令内完成)在许多计算机中都提供了专门的硬件指令Test-and-Set,简称TS,不同的机器TS略有不同,在IBM370中称为TS指令,在Intel 8086中称为XCHG指令,但是它们的基本功能是相同的。


    test_and_set指令语义:
    function test_and_set (var target :boolean):boolean;
    begin 
      boolean test_and_set:=target;

      target:=true;

      return test_and_set;

    end;

    其中: target有两种状态,当target为False时表示资源未用,若为True时表示资源正在使用。

    用test_and_set指令实现互斥: 可以为每个临界资源设置一个布尔变量lock并赋予初值False,用TS指令将变量lock状态记录于变量TS中,并将True赋予lock,这等效于关闭了临界区,使得任何进程不能进入

    repeat
      while test_and_set (lock) do no_op;
      临界区;
      lock:=false;
      剩余区;
    until false; 

    上段程序检查TS指令执行后TS状态,若为false表示进程可以进入临界区,否则不断测试执行TS指令后的TS变量值直到为假。

    3、Swap指令

       交换两个字的内容(在一条指令内,不可分割)


    swap指令语义:
    procedure swap(var a,b:boolean);
      var temp:boolean;
      begin 
        temp:=a; 
        a:=b;
        b:=temp;
      end;

    用swap实现互斥:

    repeat
      key := true;
      repeat
        swap(lock,key);  //初始lock为false,表示未使用
      until key = false;
      进程的临界区代码CS;
      lock := false;
      进程的其它代码;
    end
    展开全文
  • 多终端登录互斥方案的实现

    千次阅读 2017-11-15 18:11:00
    在一些业务中要求不允许多终端同时使用同一帐号登录。...实现方案如下。 本文转自 hgditren 51CTO博客,原文链接:http://blog.51cto.com/phpme/1924138,如需转载请自行联系原作者 ...

            在一些业务中要求不允许多终端同时使用同一帐号登录。只有在账户不活跃的情况下,才允许其他设备登录。

    实现方案如下。


    wKioL1kSv72RVrH-AACcnmZEhgo998.png










    本文转自 hgditren 51CTO博客,原文链接:http://blog.51cto.com/phpme/1924138,如需转载请自行联系原作者
    展开全文
  •  要想拟定一个方案,使它既能避免竞争条件,又能保证进程运行与协作的效率,必须要满足4个条件。  (1)、任何两个进程不能同时处于临界区  (2)、不应对CPU的速度和数量做任何假定  (3)、临界区外运行的...

                                    进程间通信(一):进程之间的冲突与处理方式

                                                               ——《现代操作系统第二章第三节》

         1、问题的提出

         我们想象一个假脱机打印程序,当一个进程需要打印一个文件时,它会将该文件放在一个假脱机目录下。另一个进程负责周期性地检查是否有文件需要被打印,如果有就打印并将其在目录中删除。简单设想,脱机目录中有很多槽位,每个槽位中存放文件名,假设它们有两个共享的变量:out,指向下一个要被打印的文件;in,指向下一个空闲的槽位。如图,下一个被打印的应该是4号槽,下一个入队的应该是7号槽。

                                          

          现在,假设进程A、B将把文件A、B入队,假设A先读到的信息是7,并且A将7存入自己的一个记忆变量中,而这时,系统认为已经分给了A足够的时间,于是中断A切换置进程B。进程读到的信息是7,将7存入自身的一个记忆变量中,并将int更新至8。至此B已经完成了所有的入队操作,转而去干其他的事情。当A继续执行时,它还认为应该将文件存到7号槽,于是A文件成功地覆盖住了B文件,而我们的B文件,永远都不会被打印。问题就出现了。

          2、抽象一些概念

          竞争条件:类似于上述情况,即两个或者多个进程读写某些共享数据,而最后的结果取决于进程的运行的精确时序,称为竞争条件。(把条件理解成情况,竞争情况,貌似更加容易理解一些=。=)

          互斥:互斥是一种手段,它使共享数据的进程无法同时对其共享的数据进行处理。

          临界区:即访问共享内存的程序片。也就是说,通过合理的安排,使得两个进程不可能同时处在临界区中,就能避免竞争条件。

          忙等待:连续测试一个变量直至某值出现位止。(如语句while(t!=0){},那么当t不为零时,while()之后的语句将永远不会执行,这种情况书中好像也叫挂起)

          自旋锁:用于忙等待的锁。(在3-(3)中,turn即使自旋锁)

                 

              3、忙等待的互斥(几种实现互斥的方法)

             (1)屏蔽中断

              原理:进程进入临界区后立即屏蔽所有中断,离开后打开中断。

              缺点:a、多核的系统无效(其他进程任然可以占用其他的CPU继续访问公共内              

                       存)

                    b、用户程序来控制中断会很危险(使想一下,一个进程屏蔽中断后不再       

                       打开中断,那你的系统就GG了)

              结论:屏蔽中断对系统本身是一项很有用的技术,但对用户进程不是一种合适的

                    通用互斥机制。

             (2)锁变量

              原理:屏蔽中断的软件实现机制。

                    假定一个共享(锁)变量,初值为0,代表临界区内无进程,进程进入临                

                 界区后将其改变为1,代表临界区内有进程;倘若进程在进入临界区之前,              

                 锁变量值为1,该进程将等待其值变为0。

    未能实现的原因:与假脱机目录的疏漏一样,如果一个进程进入临界区,但是在       

                 它把锁变量置1之前被中断,另一个进程进入临界区后将0置1,这样,

                 当前一个进程再次运行时它也将锁变量置1,这样临界区内依然存在两

                 个进程。

             (3)严格轮换

              原理:共享turn变量,用来记录轮到那个进程进入临界区。

                       

               当turn=0时,只有进程0能进入临界区,进程0在离开临界区前将turn 

                  置1,从而标志,轮到进程1进入临界区。

               缺点:严格地轮换,可能导致临界区外的进程阻塞需要进入临界区的进程(例 

                   如:当turn=0时,意味着只有进程0能进入临界区,这时如果进程0还要

                   100年才会进入临界区,而进程1需要马上进入,那进程1还要白白等100 

                   年.)

              总结:当一个进程比另一个进程慢了许多的情况下,不宜用这种方式。

             (4)Peterson解法

              这是Peterson本人发明的一种简单的互斥算法。

     

                     

              我们分情况跑一遍程序:

              a、进程0通过调用enter_region()进入临界区,此时1也想调用enter_region() 

             来进入临界区,但interested[0]为TRUE,因此被while循环挂起,当进程0出临

             界区时调用leave_region(),将interested[0]设为FALSE,进程1即可及时进入临界

             区。

              b、当进程0在调用enter_region()过程的任意时刻被中断,进程1进入临界区

              后进程0再次进行时,依然会被挂起。(实际上while循环体中的两条判断句就 

              保证了,当一个进程在临界区中时,另一个想进入临界区的进程必然会被挂起)。

     

             (5)TSL指令

              原理简述:

              TSL(test and set lock),是十分适合多处理器计算机实现互斥的硬件支持。它会 

             在一个进程进入临界区时,锁住内存总线,从而禁止其他CPU在本指令结束之前 

             访问内存。

             对于TSL指令,本文之做简单的原理性描述(虽然老师上课讲的比较详细),想进

             一步了解关于TSL指令,可以看一下书中本节内容,有详细阐述。

        4、综述

            要想拟定一个方案,使它既能避免竞争条件,又能保证进程运行与协作的效率,必须要满足4个条件。

             (1)、任何两个进程不能同时处于临界区

             (2)、不应对CPU的速度和数量做任何假定

             (3)、临界区外运行的进程不能阻塞其他进程

             (4)、不得使进程无限期等待进入临界区

        (下图为避免竞争条件的模型图)

     

                

     

    展开全文
  • 互斥 互斥的解决方案

    2021-01-05 20:13:56
    互斥的作用:保护数据的完整性 ...互斥的解决方案:软件、硬件、信号量、Monitors(管权)、信息传递; 硬件方法: 1.屏蔽中断:独占资源,代价很高,遇到紧急情况无法去解决,多处理器其他处理器也会来竞

    互斥的作用:保护数据的完整性
    进程间通信会引起死锁,(两个都等互相发消息过来),可能会有饥饿现象

    互斥的要求:
    一次只允许一个资源去使用临界起源
    在非临界区终止了这个进程的执行,也不能影响其他进程
    不允许在互斥的时候产生死锁与饥饿
    如果没有进程在访问临界区,那么就立马把申请的进程拿进去使用

    互斥条件:空闲让进
    忙则等待
    有限等待
    让权等待

    互斥的解决方案:软件、硬件、信号量、Monitors(管权)、信息传递;
    硬件方法:
    1.屏蔽中断:独占资源,代价很高,遇到紧急情况无法去解决,多处理器其他处理器也会来竞争
    2.专用机器指令:一个指令和另一个指令之间避免了冲突(test set、exchange)两个都能够控制任意多个进程
    缺点:出现忙等,消耗了处理机的时间
    可能出现饥饿现象
    可能会产生死锁

    Semaphores(信号量):一种用来进程之间交换信息的特殊变量
    Wait(s)、signal(s)是对信号量操作的原语,是一段代码,在执行操作时不能被中断;
    信号量包含一个整形量,可以被初始化为一个非负整数;
    Wait操作对信号量做递减操作:wait(s):S-1 wait操作:申请资源且可能阻塞自己(s<0)
    signal操作对信号量做加法操作:signal(s):S+1 signal操作:释放资源并唤醒阻塞进程(s<=0)
    General Semaphore(通用信号量):是记录型,其中一个域为整型,另一个域为队列,其元素为等待该信号量的阻塞进程(FIFO)
    Binary Semaphore(二进制信号量):只能是0、1

    信号量的类型:互斥信号量、资源信号量
    互斥信号量用于申请或释放资源的使用权,常初始化为1
    资源信号量用于申请或归还资源,可以初始化为大于1的正整数,表示系统中某资源的可用个数
    Wait操作用于申请资源(或使用权),进行wait原语时,可能会阻塞自己;
    Signal操作用于释放资源(或归还资源使用权),进程执行signal原语时,有责任唤醒一个阻塞进程

    信号量的意义:
    1.互斥信号量:申请/释放使用权,常初始化为1
    2.资源信号量:申请/归还资源,资源信号量可以初始化为一个正整数

    操作系统内核通过系统调用形式提供wait和signal原语,应用程序通过系统调用实现进程间的互斥
    工程实践证明,利用信号量方法实现进程互斥是高效的,一直被广泛采用。

    生产者消费者问题:
    生产者:产生数据并将数据放入缓冲区(buffer)
    消费者:一个消费者一次取一条数据
    注意:1.进程先申请资源信号量,再申请互斥信号量,顺序不能颠倒。
    2.对任何信号量的wait与signal操作必须配对。同一进程中的多对wait与signal语句只能嵌套,不能交叉。
    3.对同一个信号量的wait与signal可以不在同一个进程中。
    4.wait与signal语句不能颠倒顺序,wait语句一定先于signal语句。

    读者写者问题:
    可用于解决多个进程共享一个数据区(文件、内存区、一组寄存器等),其中若干读进程只能读数据,若干写进程只能写数据等实际问题。
    读者优先:一旦有读者正在读数据,允许多个读者同时进入读数据,只有当全部读者退出,才允许写者进入写数据。(写者容易饥饿)

    展开全文
  • 多进程写sqlite数据库解决互斥方案,当然代码也顺便处理了多线程写数据库的问题。
  • 背景 现状:A公司、B公司都有一套"销售助手"。 需求:同一个身份证只能用...并发转成顺序操作(互斥)。 如引入分布式锁zookeeper/redis。 优点: 实现简单。 代码更改少。 缺点: 没有共同的分布式
  • 密保通常都会有n个问题,让用户选择其中2、3个,而且都不会让用户选择重复的问题。这就要求密保互斥,具体实现如下,有此需求的朋友可以参考下
  • 进程互斥的硬件解决方案

    千次阅读 2016-04-26 17:14:23
    方案一:中断屏蔽方法开关中断指令: 执行关中断指令 临界区操作 执行开中断指令 特点: 简单高效 代价高,限制CPU并发能力(临界区大小) 不适用于多处理器 适用于操作系统本身,不适于用户进程 方案二:测试并加锁...
  • 很简单,简单点写就是存一个key到redis,设置失效时间,当这个key存在就是锁着 稍微复杂点就是实现jdk的Lock接口,在lock()方法或者tryLock()方法中写添加redis的逻辑,在unlock()写删除redis key的逻辑 ...
  • 关中断是指在此中断处理完成前,不处理其它中断,这样就可以保证进程不被中断,从而保证了互斥性(不允许两个以上的共享该资源的并发进程同时进入临界区称为互斥),因此采用关中断。 缺点? ①将禁止一切中断的...
  • final ViewHolder finalVh = vh; finalVh.rb.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if(!finalVh.rb.isChecked()){ setI
  • 互斥

    2020-11-07 19:35:54
    文章目录一.原子问题二.锁模型三.解决方案2.1 synchronized四.保护资源4.1 关系简介4.2 保护没有关联关系的多个资源4.3 保护有...互斥的解决方案是锁,把一段需要互斥执行的代码称为临界区。 这个锁模型展示的是锁和
  • 线程互斥与同步 synchronized使用细节及原理 Reentrylock使用细节 三种模式思路 线程互斥与同步 互斥:指的是多个线程不能同时访问共享变量 同步:指的是多个线程按指定的顺序执行操作 在同时有多个线程运行过程...
  • 文章目录同步互斥机制进程互斥临界区实现进程互斥方案 同步互斥机制 进程互斥 定义: 当很多进程需要共享资源时, 而这些资源又具有排他性,那么各个进程竞争使用这些资源的关系称为进程互斥 临界区 临界资源...
  • 多个地方同时向一个文件读写的互斥问题解决方案
  • 文章目录一、线程安全与互斥(案例说明)1.经典案例2.代码实现小结二、解决思路1.解决办法——同步代码块2.同步代码块(SellTicket线程)3.解决办法——同步函数2.同步函数(SellTicket线程)总结 一、线程安全与...
  • 第六章 进程间互斥同步与通信(操作系统原理;问题纲要;进程并发运行所带来的问题;...互斥方案应满足的4个条件;互斥的实现方案;关中断;锁变量;严格轮转法;Peterson方案;TSL指令测试与设置指令;信号量(semaphore;DOWN原语
  • 之前总结过,一个或者多个操作在CPU执行的过程中不被中断的特性...在早期单核 CPU 时代,这个方案的确是可行的,而且也有很多应用案例,但是并不适合多核场景。这里我们以 32 位 CPU 上执行 long 型变量的写操作为例...
  • 互斥

    2018-12-28 20:11:44
    互斥互斥量: 初始化 上锁 P 会阻塞 lock 防止生产者、消费者同时进入 解锁 v unlock 销毁 初始化 互斥量用一个pthread_mutex_t型的变量表示。使用互斥量之前需要对它进行初始化,其接口函数原型如下: int ...
  • 进程互斥

    2017-05-06 08:25:51
    互斥是由程序共享资源所引起的,某一个资源不允许同时多个程序访问,那么解决方法是要么访问其他空闲的同种资源,要么等待这一资源。等待这一资源就要在操作系统实现互斥:当一个进程正在使用资源的时候,其他希望...
  • 所有的ssl公用一个,但是这样很容易死锁,因为不会构成竞争的两个ssl指针会互相依赖,比如一个read依赖一个write,这样一来接下来的解决方案就是一个通信通道一个锁,但是实现起来非常复杂,于是最终的方式就是实现...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 60,628
精华内容 24,251
关键字:

互斥方案