b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

进程同步概念简介 多线程上篇(四)(2)

电脑杂谈  发布时间:2019-08-26 06:03:48  来源:网络整理

而管程每次只允许一个进程处于管程,从而推动了进程互斥

image_5c567cef_6ac2

管程的核心模式就是相当于构造了一个管理进程同步的“IOC”容器。

管程是一个语言的构成成分(非操作系统支持个别),管程的互斥访问完全由编译程序在编译时手动添加上,无需程序员关心,而且确保正确

一般的 monitor 实现方式是编程语言在词汇上提供语法糖,而如何推动 monitor 机制,则属于编译器的工作

比如,Java中使用synchronized时,这是不是一种管程理念?你也是写了一个synchronized关键字(语法糖),多线程的共享同步完全不用你操心了

(注意:并不是所有的语言都支持管程的概念)

image_5c567cef_476e

管程可以确保互斥,同一时刻仅有一个进程处于管程,所以他必然还要同步软件,如两个同步操作线程 wait和 signal,他还应该互斥量用以控制管程进入的同步

当某进程通过管程请求获取临界资源而无法满足时,管程便调用 wait 原语使该进程等待,并将其排在等待队列上

仅当另一进程访问完成并传递该资源以后,管程调用signal原语,唤醒等待队列中的队首进程

但是,仅仅这个互斥量是不够的

比如,如果还要处理之前提到过的“执行排序控制”,如何控制前驱关系?

当一个进程调用了管程,在管程中时被阻塞或挂起,直到阻塞或挂起的诱因解除,而在此期间,如果该进程不释放管程,则其它进程能够开启管程,被迫长时间地期待。

所以还应该其他的信号量用于针对其他条件进行同步,这些就是条件变量,所以一个完整的管程定义为:

Minitor{
  管程内部的变量结构以及说明;
  condition  条件变量列表;
  函数1(){
  }
  ......
  函数N(){
  }
  init(){
          对管程中的局部变量进行初始化;
  }
}

cassandra peterson_peterson反应_peterson算法忙等待

条件函数就是当读取管程过程的进程能够运行时,用于阻塞进程的一种信号量

管程中对每个条件变量都须给予说明,其方式为:Var x,y:condition。

对条件变量的操作仅仅是wait和signal,条件变量也是一种抽象数据类型,每个条件变量保存了一个链表,用于记录因该条件函数而阻塞的所有进程,同时提供的两个操作即可表示为 x.wait和x.signal,其含义为:

① x.wait:正在读取管程的进程因 x 条件应该被阻塞或挂起,则读取 x.wait 将自己插入到x条件的等候队列上,并释放管程,直到x条件差异。此时其它进程可以使用该管程。

② x.signal:正在读取管程的进程发现 x 条件出现了变化,则读取 x.signal,重新启动一个因 x 条件而阻塞或挂起的进程。如果存在多个这样的进程,则选择其中的一个,如果没有,则继续执行原进程,而不造成任何结果。这与信号量机制中的 signal操作不同,因为后者总是要执行s:=s+1操作,因而就会改变信号量的状况。

如果有进程Q因x条件进入阻塞状况, 当正在读取管程的进程P执行了x.signal操作后,进程Q 被重新启动,此时两个进程 P和Q,如何确认哪个执行,哪个等待,可选用以下两种方法之一进行处理:

(1) P等待,直至Q 离开管程或等候另一条件。

(2) Q等待,直至P离开管程或等候另一条件。

采用哪种处理方法,当然是各执一词。

Hoare 采用了第一种处理方法

而 Hansan 选择了两者的折衷,他要求管程中的过程所执行的signal 操作是过程体的最后一个操作,于是,进程P执行signal操作后及时撤出管程,因而进程Q马上被修复执行。

进程控制是操作系统的一种硬性管理,是需要要有的,如果没有进程控制,就没办法合理安排运行进程, 根本没法完成状况的切换维护等。

进程的同步是一种软逻辑上的,如果不做,并不会导致平台出难题或者进程能够运行,但是如若不进行同步,结果却很可能是出错的,所以也有需要做的

类比装修的话,进程控制就是硬装,不装无法住,总归要水电搞搞好,进程同步就是家具电器和装修,硬装后住下去不会出现“生存问题”(至少有水喝有电用),但是你要是连个热水壶都没有是准备要喝开水么

进程同步的概念多很复杂抽象,因为貌似是概念描述,没有涉及到详细的推动细节。

进程同步的核心是针对临界资源的访问控制,也就是对于临界区的访问。

不管是临界区算法还是信号量机制还是管程机制,终归也都是控制处于临界区的不同的谋求思路。

每种不同的算法、机制都各自有各自的传统,场景。

信号量机制将临界资源的访问的互斥,演化为可以多个进程访问资源(整型信号量),记录型信号量对整型信号量机制进行改进,处理了忙等的弊端

然后继续演变出AND型,可以对不同的资源进行同步,而不仅仅是同一种资源

最后发展为信号量集的方式,可以对不同的资源、不同的个数、不同的限制进行处理,变得更为通用。

管程更多的是一种设计思维,管程就是管理进程的程序,进程对于资源的同步操作全都依赖管程这一“大管家”,管程是编程语言级别的,不需要程序员进行过多的处理,一般会提供语法糖

需要切记并不是所有的语言都有管程的概念(Java是有的),管程让你从同步的细节中解放下来,可以在众多画面下简化同步的推动。

管程的概念是“线程同步”的“IOC”,大大简化了同步的代价。

不管临界区算法还是信号量机制还是借助于管程,他们都是一种同步软件,可以觉得人们就是一组“方法”,“方法”的逻辑就是本文前面介绍的机理

在应该进程同步问题的缓解策略中,可以直接使用“封装好的方式”

以上,尽管都是在说操作系统关于进程的同步的处理,其实,在同步问题上进程和线程的设计模式是相通的

因为这本质上都是在说并发----多道程序运行的操作系统,通常使用轮转时间片的方法并发的运行多个进程

原文地址:进程同步概念简介 多线程上篇(四)


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-120618-2.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 朱德
      朱德

      伊拉克依靠美国反恐只能越反越恐

      • 十七年蝉
        十七年蝉

        遇过里面有活着的小虫

    • 张宏
      张宏

      那我肯定不说了

    • 张磐
      张磐

      中国动作太快了

    热点图片
    拼命载入中...