文章

103

粉丝

0

获赞

1

访问

5.3k

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

semaphore ymutex=1

semaphore zmutex=1

thread1{

cnum w;

p(ymutex);

w=add(x,y);

v(mutex);

thread2
{
    cnum w;

    p(ymutex);

    p(zmutex);
    w=add(y,z);

    v(zmutex);

    v(ymutex);
    ...
}

thread3
{
    cnum w;
    w.a=1;
    w.b=2;

    p(zmutex);
    z=add(z,w);

    v(zmutex);

   p(ymutex);
    y=add(y,w);

   v(ymutex);
    ...
}


评分及理由

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

学生定义了两个信号量ymutex和zmutex,分别用于保护y和z的访问。但是标准答案中需要三个信号量:mutex_y1用于thread1和thread3对y的互斥,mutex_y2用于thread2和thread3对y的互斥,mutex_z用于z的互斥。学生只定义了两个信号量,无法正确处理thread1和thread2同时访问y的情况,这会导致并发度降低或产生竞态条件。因此扣2分,得1分。

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

thread1中使用了p(ymutex)和v(mutex),但v操作中写成了mutex而不是ymutex,这是一个明显的逻辑错误。虽然思路正确(保护对y的访问),但信号量名称错误会导致运行时错误。扣0.5分,得0.5分。

(3)thread2代码得分及理由(满分2分)

thread2中正确使用了ymutex和zmutex来保护对y和z的...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发