文章
149
粉丝
195
获赞
0
访问
19.2k
(1) 信号量定义与初始化:
semaphore rmutex = 1, wmutex = 1, readTry = 1, resource = 1;
int readCount = 0, writeCount = 0;
(2) 读者进程:
void reader() {
P(readTry);
P(rmutex);
readCount++;
if (readCount == 1) P(resource);
V(rmutex);
V(readTry);
// read file...
P(rmutex);
readCount--;
if (readCount == 0) V(resource);
V(rmutex);
}
(3) 写者进程:
void writer() {
P(wmutex);
writeCount++;
if (writeCount == 1) P(readTry);
V(wmutex);
P(resource);
// write file...
V(resource);
P(wmutex);
writeCount--;
if (writeCount == 0) V(readTry);
V(wmutex);
}
(4) 信号量作用:
readTry 实现写者优先,resource 控制文件访问互斥,rmutex/wmutex 保护计数器。确保有写者等待时新读者阻塞,写者不会饿死。
评分及理由
(1)得分及理由(满分2分)
学生定义了所有必要的信号量(rmutex、wmutex、readTry、resource)和计数器(readCount、writeCount),并正确初始化信号量为1。信号量命名与标准答案略有不同,但功能完全一致,符合要求。因此得2分。
(2)得分及理由(满分2分)
读者进程代码框架完全正确:先P(readTry)实现写者优先控制,再通过rmutex保护readCount,第一个读者P(resource)锁定文件,最...
登录后发布评论
暂无评论,来抢沙发