加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

华为一道笔试题解答:A,B,C,D四个进程,A向一个缓冲区写数据,B,C,D从该缓冲区读数据

(2011-08-31 12:59:07)
标签:

华为

笔试题

线程

消费者

pv操作

生产者

a

b

c

d

it

分类: 技术

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

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

我的答案:

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

 

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);

   }

}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有