文章

397

粉丝

40

获赞

2

访问

88.2k

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

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

semaphore mutex_y1 = 1;//线程1和线程3之间关于全局变量y的互斥锁
semaphore mutex_y2 = 1;//线程2和线程3之间关于全局变量y的互斥锁
semaphore mutex_z = 1;//线程2和线程3之间关于全局变量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;
    p(mutex_y1);
    w=add(x,y);
    v(mutex_y1);
    ...
}

thread2
{
    cnum w;
    p(mutex_z);
    p(mutex_y2);
    w=add(y,z);
    v(mutex_z);
    v(mutex_y2);
    ...
}

thread3
{
    cnum w;
    w.a=1;
    w.b=2;
    p(mutex_z);
    z=add(z,w);
    v(mutex_z);
    p(mutex_y2);
    p(mutex_y1);
    y=add(y,w);
    v(mutex_y1);
    v(mutex_y2);
    ...
}

 


评分及理由

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

得分:3分

理由:学生正确定义了三个信号量mutex_y1、mutex_y2和mutex_z,并分别初始化为1,与标准答案一致,用于保护对y和z变量的互斥访问。信号量的命名和用途说明清晰。

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

得分:1分

理由:thread1中正确使用p(mutex_y1)和v(mutex_y1)保护了对y的读操作(add(x,y)),与标准答案一致,实现了与threa...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发