文章

246

粉丝

40

获赞

2

访问

12.4k

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

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分。

(2)线程1的互斥实现(满分1分)

学生使用wait(mutex)和p(mutex)(应为signal(mutex))来保护add(x,y)操作。虽然语法有误(p操作应为signal),但基本实现了互斥。然而,由于信号量设计错误(单一锁),无法实现并发优化。扣0.5分(因信号量设计错误导致逻辑问题,但互斥意图正确)。

(3)线程2的互斥实现(满分1分)

学生代码中w=add(x,y)明显错误(应为add(y,z)),这是一个逻辑错误,因为线程2应该计算y和z的和。同时,信号量使用错误(单一锁)且语法错误(p操作应为signal)。扣1分(逻辑错误和信号量...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发