文章

149

粉丝

195

获赞

0

访问

19.2k

头像
2026 年 408 冲刺预测 5 套卷(一) - 第46题回答
操作系统
发布于2025年11月17日 16:59
阅读数 65

(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)锁定文件,最...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发