文章
149
粉丝
195
获赞
0
访问
18.9k
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)得分...
登录后发布评论
暂无评论,来抢沙发