文章
286
粉丝
0
获赞
2
访问
122.9k
1)是临界区 如果p1 p2同时执行C1向B中写入数据分组可能会导致数据不一致 ,所以要求任何时刻只能有一个进程访问B所以实现C1的代码是临界区
2)
semaphore mutex=1;//互斥执行
semaphore full=0;//初始空
P1(){
while(TRue){
p(mutex);//互斥
C1/执行C1向B写入数据
V(mutex);
V(full);//与p2同步
}
}
P2(){
while(TRue){
P(full);//有数据时才能访问
p(mutex);//互斥
C2/执行C2从B取出数据
V(mutex);
}
}
3)
semaphore mutex=1;//互斥访问
p1(){
p(mutex);//互斥访问B
C2//执行C2
V(mutex);//释放互斥锁
}
p2(){
p(mutex);//互斥访问B
C2//执行C2
V(mutex);//释放互斥锁
}
评分及理由
(1)得分及理由(满分2分)
学生正确指出C1的实现代码是临界区,并给出了合理的解释:多个进程同时执行C1可能导致数据不一致,因此需要互斥访问。答案与标准答案核心思想一致。得2分。
(2)得分及理由(满分3分)
学生定义了正确的两个信号量(mutex和full)并给出了正确的初值(1和0),作用描述基本正确。同步逻辑正确:P1先互斥写入,然后V(full)通知;P2先P(full)等待数据,再互斥读取。代码中存在两处笔误/不规范:1. 信号量操作写成了p/V而非wait/signal,但含义明确;2. P1和P2的代码中包含了`while(True)`循环,题目只要求各执行一次,此循环虽不影响单次执行的正确性,但略显多余,并非逻辑错误。整体思路和实现正确。扣1分,因为题目明确要求用`wait()`和`signal()`操作描述,学生使用了`p()`和`V()`,属于未完全按照题目要求作答。得2分。
(3)得分及理由(满分3分)
学生定义了一个互斥信号量mutex,初值为1,用于保护对缓冲区B的访问。P1...
登录后发布评论
暂无评论,来抢沙发