文章

121

粉丝

0

获赞

0

访问

14.5k

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

//复数的结构类型定义
typedef struct
{
    float a;
    float b;
}cnum;
cnum x,y,z; //全局变量

//计算两个复数之和
cnum add( cnum p,cnum q)
{
    cnum s;
    s.a=p.a+q.a;
    s.b=p.b+q.b;
    return s;
}

semaphore m_x=1, m_y=1, m_z=1;
semaphore mutex = 1;

thread1
{
    wait(mutex);
    wait(x);
    wait(y);
    cnum w;
    w=add(x,y);
    signal(x);
    signal(y);
    signal(mutex);
}

thread2
{
    wait(mutex);
    wait(z);
    wait(y);
    cnum w;
    w=add(y,z);
    signal(z);
    signal(y);
    signal(mutex);
}

thread3
{
    wait(mutex);
    wait(z);
    wait(y);
    cnum w;
    w.a=1;
    w.b=2;
    z=add(z,w);
    y=add(y,w);
    signal(z);
    signal(y);
    signal(mutex);
}

评分及理由

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

学生定义了m_x=1, m_y=1, m_z=1和mutex=1四个信号量。但存在以下问题:

  • m_x信号量是多余的,因为只有thread1访问x,且x是只读的
  • 使用mutex作为全局互斥锁会严重降低并发性,不符合题目"最大程度地并发执行"的要求
  • 没有按照标准答案的思路为y变量设置两个独立的互斥信号量

扣2分,得1分

(2)thread1代码得分及理由(满分1分)

thread1中:

  • 使用了不必要的全局mutex和x信号量
  • 对y的保护方式不正确
  • 没有实现thre...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发