365备用网址

当前位置: 主页 > 365备用网站 >

华为一道笔试题解答:A,B,C,D四个进程,A向一个缓

时间:2020-07-08 02:47来源:原创 作者:admin 点击:
今遇到华为一道笔试题,关于使用信号量实现进程同步的,我思考了一下,但不是很定该怎样设计,现贴出来,期望童鞋们讨论、或指导一二。 题目:A,B,C,D四个进程,A向一个缓冲区写

  今遇到华为一道笔试题,关于使用信号量实现进程同步的,我思考了一下,但不是很定该怎样设计,现贴出来,期望童鞋们讨论、或指导一二。

  题目:A,B,C,D四个进程,A向一个缓冲区写数据,B,C,D从该缓冲区读数据,A要等到B,C,D都已经读好才能写下一个。用p,v操作实现通讯。

  我的答案:

  设置五个信号量。缓冲区是否正在被使用信号量:S=1(初值,下同);B有数据可读:bs=0;C有数据可读:cs=0;D有数据可读:ds=0;另外增加一个全局变量SA=3,表示b、c、d均读完。

  Var

  SA=3;//全局变量,用来控制bcd都读完了A才可以写,借助了全局变量,这也是我不确定的地方,

  //可否不借助全局变量实现呢?

  //线程A程序

  ProcedureA(){

  P(S);

  P(F);

  ----写数据----

  SA=3;

  V(F)

  V(bs);

  V(cs);

  V(ds);

  }

  //线程B程序,线程C、D与B类似,就不重复

  ProcedureB(){

  P(bs);

  P(F);

  -

  ---读数据-----

  SA=SA-1;

  V(F);

  If(SA<1){

  V(S);

  }

  }

(责任编辑:admin)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表