文章

63

粉丝

0

获赞

0

访问

3.1k

头像
2017年计算机学科专业基础综合试题 - 第46题回答
操作系统
发布于2025年10月27日 22:14
阅读数 22

z2=0;y1=0;y2=0;

z2为thread2和thread3对z同步信号量、y1为thread1和thread3对y的同步信号量、y2为thread2和thread3对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);
        v(y1);
    ...
    }

    thread2
    {
        cnum w;
        w=add(y,z);
        v(y2);
        v(z2);
    ...
    }

    thread3
    {
        cnum w;
        w.a=1;
        w.b=2;
        p(z2);
        z=add(z,w);
        p(y1);
        p(y2);
        y=add(y,w);
    ...
    }

 


评分及理由

(1)信号量定义得分及理由(满分3分)

学生定义了三个信号量:z2、y1、y2,分别用于控制对z、y的访问同步。但信号量的初始值设置为0,这不符合互斥信号量的要求(互斥信号量通常初始值为1)。此外,信号量的命名和用途描述不够准确(如y2被描述为"thread2和thread3对z的同步信号量",但实际应为对y的同步)。因此扣2分,得1分。

(2)线程同步实现得分及理由(满分5分)

线程1中只使用了V(y1)操作,没有对应的P操作,无法实现互斥。线程2中使用了V(y2)和V(z2),但没有P操作,无法保证互斥访问。线程3中使用了P(z2)、P(y1)、P(y2),但信号量初始值为0,会导致线程3永远阻塞。整体同步逻辑错误,无法实现互斥访问的要求。因此扣5分,得0分。

题目总分:1+0=1分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发