美文网首页
进程同步

进程同步

作者: nino天 | 来源:发表于2014-08-20 16:48 被阅读100次

进程同步概念

并发进程在执行次序上的协调,以达到有效的资源共享和相互合作,使程序执行有可再现性。

进程间的关系

资源共享关系:(进程间接制约)需互斥地访问临界资源。
相互合作关系:(进程直接制约)

临界资源:一次仅允许一个进程访问的资源,引起不可再现性是因为临界资源没有互斥访问
临界区:每个进程中访问临界资源的那段代码称为临界区,要保证进程互斥的进入自己的临界区,才能实现对临界资源互斥的访问

repeat
  entry section
  critical section
  exit section
until false

要访问临界资源首先要检查,是否可以访问,可以则进入自己的临界区。完成之后要退出..

信号量机制

记录型信号量

S.value记录系统中某资源的数目

procedure wait(s)
var s: semaphore
begin
s.value:=s.value –1;
if s.value <0 them block (S,L) //自己进入阻塞状态
end
procedure signal (S)
var s:semaphone
begin
s.value:=s.vaule+1
if s.value<=0 then wakeup(s.L)//唤醒阻塞状态的一个进程
end

AND型信号量,要么全分配,要么一个也不分配

死锁:在无外力作用下的一种僵持状态。当进程需要多个共享资源时,因为不同进程的并发执行,有可能造成死锁..

进程互斥

只要设置信号量mutex的初值为1即可

var mutex: semaphore:=1
    begin
    parbegin
        process1:begin
                repeat
                   wait(mutex);
                   critical setion
                   signal(mutex);
                   remainder section
                until false;
                end
process2: begin
               repeat
                  wait(mutex);
                   critical setion
                   signal(mutex);
                   remainder section
                until false;
                  end
parend

生产者-消费者问题

当然两个wait可以合并成swait这个AND信号量来替代。
mutex(1):使诸进程互斥地访问n个缓冲区。
empty(n)full(0):空、满缓冲区数量。

Var mutex,empty,full:semaphore:=1,n,0;  buffer:array[0,1,…,n-1] of item;
    in, out: integer: =0,0;
    begin
        parbegin
producer:  begin
repeat
            Produce an item in nextp;
            wait(empty);//还有空位才进入下面的临界区
            wait(mutex);//互斥的进入缓冲区
            buffer(in):=nextp;
            in:=(in+1) mod n;
            signal(mutex);
            signal(full);
Until false;
end
consumer:begin
repeat
              wait(full);
              wait(mutex);
              nextc:=buffer(out);
              out:=(out+1) mod n;
              signal(mutex);
              signal(empty);
              Consumer the item in nextc;
Until false;
end
parend

哲学家进餐问题

以下这段代码有两个问题:首先,可能造成死锁,5个人分别拿到了一只叉子。其次,wait和signal没有成对嵌套。

Var chopstick: array[0, …, 4] of semaphore;
Repeat
    wait(chopstick[i]);
    wait(chopstick[(i+1)mod 5]);
    …
   eat
    …
   signal(chopstick[i]);
   signal(chopstick[(i+1)mod 5]);
    …
   think;
Until false

改进的方法:增加一个资源信号量room,只允许4个人同时去申请叉子,那么肯定有至少一个人可以拿到两个叉子。

Var chopstick: array[0, …, 4] of semaphore 1;
      room:4
Repeat
    wait(room);
    wait(chopstick[i]);
    wait(chopstick[(i+1)mod 5]);
    …
   eat
    …
   signal(chopstick[(i+1)mod 5]);
   signal(chopstick[i]);
   signal(room);
    …
   think;
Until false

改进方法:用AND信号量

读者写者问题

相关文章

  • 操作系统(二)进程管理 2.3 进程同步

    2.3 进程同步 2.3.1 进程同步的基本概念 2.3.1.1 进程同步 进程具有异步性的特征。异步性是指,各并...

  • Java中的同步与异步

    进程同步用来实现程序并发执行时候的可再现性。 一.进程同步及异步的概念 1.进程同步:就是在发出一个功能调用时,在...

  • 同步与异步

    进程同步用来实现程序并发执行时候的可再现性。 进程同步及异步的概念 1.进程同步:就是在发出一个功能调用时,在没有...

  • 进程的同步与通信,进程与线程同步的区别,进程与线程通信的区别

    进程同步与互斥的区别? 进程的同步方式有哪些? 进程的通信方式有哪些? 进程同步与通信的区别是什么? 线程的同步/...

  • 操作系统(2) -- 处理机调度算法、进程同步

    内容大纲 1、处理机调度基本概念、调度方式 2、典型调度算法及基本准则 3、进程同步基本概念 4、进程同步实现方法...

  • Linux下的信号量使用

    信号量 信号量原语 进程同步的主要方式之一。具体概念参考[《《操作系统概念精要》基本概念整理之进程同步篇(二)》]...

  • 二.进程(3)进程同步

    2.3 进程同步 1. 理解同步的含义 2. 信号量机制控制进程同步 3. 管程 进程间有什么相互影响? 两种制约...

  • 进程间的通信

    1.进程通信和进程同步的区别 进程通信和进程同步是两个容易混淆的概念。同步是指保证进程的先后执行顺序不混乱。通信是...

  • 进程同步

    进程同步的基本概念 在多道程序环境下 ,进程是并发执行的,不同进程之间存在不同的相互制约关系。 为了协调进程之间的...

  • 进程同步

    用的时候给我说一声。 在进程与线程中提到过进程之间的联系,进程互斥是描述了进程间的间接相互作用。而进程同步则是一种...

网友评论

      本文标题:进程同步

      本文链接:https://www.haomeiwen.com/subject/vfoetttx.html