首页 习题正文

46.(8分)某进程中有3个并发执行的线程thread1、t

46.(8分)某进程中有3个并发执行的线程thread1、thread2和thread3,其伪代码如下所示。 //复数的结构类型定义 typede struct } float a; float b }cnum;cnumx,y,z;//全局变量 //计算两个复数之和 cnum add(cnum p, cnum q) { cnum S; S.a=p.a+q.a; s.b=p.b+q.b; return s; } Thread1 { cnum w; w=add(x,y); ····· } thread2 } cnum w; w=add(y, z); ····· } thread3 { cnum w; w.a=1; w.b=1; z=add(z,w); y=add(y, w); ····· } 请添加必要的信号量和P、V(或wait( )、signal( )操作,要求确保线程互斥访问临界资源,并且最大程度地并发执行。



【参考答案及解析】
先找出线程对在各个变量上的互斥、并发关系。如果是一读一写或两个都是写,那么这就是互斥关系。每一个互斥关系都需要一个信号量进行调节。 semaphore mutex y1=1;//mutex y1用于thread1与thread3对变量y的互斥访问。(1分) semaphore mutex_y2=1;//mutex_y2用于thread2与thread3对变量y的互斥访问。(1分) semaphore mutex_z=1; //mutex_z用于变量z的互斥访问。(1分)

正在整理中,欢迎在文下评论区提供答案解析,谢谢!
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接:https://scpro.cn/v/a2c040162ce146d3.html