计算机与信息学院 操作系统课程设计报告 一、 开题报告 (一) 该项课程设计的意义; 1
更加深入的了解读者写者问题的算法; 2
加深对线程,进程的理解; 3
加深对“线程同步”概念的理解,理解并应用“信号量机制”; 4
熟悉计算机对处理机的管理,了解临界资源的访问方式; 5
了解C++中线程的实现方式,研读API
(二) 课程设计的任务 多进程/线程编程:读者-写者问题
设置两类进程/线程,一类为读者,一类为写者; 随机启动读者或写者; 显示读者或写者执行状态; 随着进程/线程的执行,更新显示; (三) 相关原理及算法描述; 整体概况: 该程序从大体上来分只有两个模块,即“读者优先”和“写者优先”模块
读者优先: 如果没有写者正在操作,则读者不需要等待,用一个整型变量 readcount 记录读者数目,用于确定是否释放读者线程,readcount 的初值为 0
当线程开始调入时
每个读者准备读
等待互斥信号,保证对readcount 的访问,修改互斥
即 readcount++
而当读者线程进行读操作时,则读者数目减少(readcount--)
当readcout=0 时,说明所有的读者都已经读完,离 开临界区 唤 醒 写者(LeaveCriticalSection(&RP_Write);), 释放互斥信号(ReleaseMutex(h_Mutex))
还 需要一个互斥对象mutex来实现对全 局 变量 Read_count 修改时的互斥
另外 ,为了实现写-写互斥,需要增 加一个临界区 对象 Write
当写者发 出 写请 求 时,必 须 申 请 临界区 对象 的所有权
通 过 这 种 方法,可 以 实现读-写互斥,当Read_count=1 时(即第 一个读者到 来时),读者线程也 必 须 申 请 临界区 对象 的所有权 写者优