进程同步

进程同步概念

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

进程间的关系

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

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

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信号量

读者写者问题

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容

  • ** 本文摘自汤小丹主编《计算机操作系统》(第三版)2.3 进程同步 ** 在 OS 中引入进程后,虽然提高了资源...
    刘帅_阅读 3,086评论 0 0
  • 在描述一个程序时,我们总是认为内部有一个“小人”,可以按程序所规定的步骤来执行程序。然而,在实际的系统中并不是这样...
    棨帆阅读 4,937评论 0 4
  • 一、进程同步的概念 在多道程序环境下,进程是并发执行的,不同进程之间存在着不同的相互制约的关系。为了协调进程之间的...
    saviochen阅读 697评论 1 6
  • 本次实验比较简单,相较于前几届需要在linux0.11 底下实现信号量,这次只需要在linux下写个利用信号量解决...
    寒夏凉秋阅读 3,103评论 0 2
  • 10月9日,把心心念念的紧急事情优先处理好,充实的一天,不离忙碌。放假时公司给员工两盒月饼作为过节礼,收假第一天,...
    芳芳行洁阅读 360评论 1 2