文章

397

粉丝

40

获赞

2

访问

90.3k

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

semaphore mutex = 1;

//复数的结构类型定义
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;
}

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

thread2
{
    cnum w;
    wait(mutex);
    w=add(x,y);
    p(mutex);
    ...
}

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

评分及理由

(1)信号量定义(满分3分)

学生只定义了一个信号量mutex,但标准答案需要三个信号量(mutex_y1、mutex_y2、mutex_z)来分别保护不同的临界资源(y和z),以实现最大程度的并发。学生答案无法实现并发,且对资源保护不精确。扣3分。

得分:0分

(2)thread1代码(满分1分)

学生使用wait(mutex)和p(mutex)(p应为signal)保护add(x,y),但标准答案要求只保护y(使用mutex_y1),而x是只读的无需保护。学生错误地保护了整个add操作,且信号量使用错误(p(mutex)应为signal(mutex)),但基本有互斥意识。扣0.5分(信号量操作错误)和0.5分(过度保护导致并发性降低)。

得分:0分

(3)thread2代码(满分1分)

学生代码中w=add(x,y)应为add(y,z)(题目要求),这是一个逻辑错误(误用x而不是z)。同时,信号量保护错误(同thread...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发