文章

149

粉丝

195

获赞

0

访问

18.9k

头像
2025 年 10 月第 1 次 408 月考试卷 - 第45题回答
操作系统
发布于2025年11月29日 18:03
阅读数 10

1)
in = 0, out = 0
buffer[k]
semaphore empty = k, full = 0;//缓冲区空闲和非空闲数量
semaphore mutex_in = 1, mutex_out = 1//生产者之间互斥访问缓冲区、消费者之间互斥访问缓冲区;

2)

Process Producer_i:
while true:
    produce data;
    P(empty);
    P(mutex_in);
    write to buffer[in];
    in = (in + 1) % k;
    V(mutex_in);
    V(full);

3)

Process Consumer_j:
while true:
    P(full);
    P(mutex_out);
    read from buffer[out];
    out = (out + 1) % k;
    V(mutex_out);
    V(empty);


评分及理由

(1)得分及理由(满分4分)

学生定义了empty和full信号量,初始值正确,含义正确(2分)。但mutex_in和mutex_out的定义不完整:mutex_in只能保护生产者之间的写指针互斥,mutex_out只能保护消费者之间的读指针互斥,但缺少对单个缓冲区的互斥保护(缓冲区可能被生产者和消费者同时访问)。此外,缺少对缓冲区本身的互斥信号量。扣2分。

得分:2分

(2)得分及理由(满分2分)

生产者流程基本正确:有P(empty)申请空缓冲区,通过mutex_in保护写指针操作,更新指针后写入缓冲区。但存在严重问题:缺少对缓冲区本身的互斥操作(P(mutex[buf_idx])),可能导致生产者和消费者同时访问同一缓冲区。此外,写入操作在互斥锁保护范围内,但互斥锁范围过大(覆盖了整个写入和指针更新)。扣1分。

得分:1分

(3)得分...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发