《读写者问题课程设计》是一门旨在探讨阅读与写作中遇到的核心挑战及解决策略的课程。通过深入分析读写障碍和技巧提升方法,帮助学习者克服个人瓶颈,提高语言表达能力和理解力,培养批判性思维和创造性写作技能。
初始条件:1. 操作系统为Linux或Windows;2. 程序设计语言使用C或Java。
任务要求:
在设有连续的20个存储单元的情况下(这些单元按递增顺序填充数据项,即从1到20),完成以下主要任务:
1. 技术需求包括但不限于:每个读/写者都需生成一个线程,并设计正确的同步算法;每次操作完成后立即显示当前存储区的所有内容、指针位置以及自定义标识符。读者至少需要3个实例,而写者则至少2个。
2. 确保多个读/写者之间可以共享用于处理这些单元的函数代码。
此外,还需撰写一份设计说明书,内容应包括但不限于:题目及要求;总体的设计理念、所使用的平台和语言工具等信息;数据结构与模块说明(需附带功能流程图);源程序及其运行结果展示,并明确标注存储各个文件的位置及相关主机IP地址。
3. 调试报告需要记录调试过程,以及个人对项目的自我评价与总结。
上机时间安排:6月27日开始至6月30日下午14:00-18:00
源代码如下:
```cpp
#include
#include
#include fstream.h
int readcount = 0; //读者数目
int writecount = 0; //写者数目
CRITICAL_SECTION RP_Write; //临界区
CRITICAL_SECTION cs_Write;
CRITICAL_SECTION cs_Read;
struct ThreadInfo {
int Threadhao; //线程序号
char ThreadClass; //线程类别
double ThreadStartTime; //线程开始时间
double ThreadRunTime; //线程读写持续时间
};
void ReaderFun(char* file); //读者优先函数
void R_ReaderThread(void *p); //处理读者优先的读者线程
void R_WriterThread(void *p); //处理读者优先的写者线程
void WriterFun(char* file);
void W_ReaderThread(void *p);
void W_WriterThread(void *p);
int main() {
char select;
while (true) {
cout << ***************本程序实现读者-写者问题*******\n << endl;
cout << 1:读者优先\n;
cout << 2:写者优先\n;
cout << 3:退出\n;
do {
cin >> select;
if (select != 1 && select != 2 && select != 3) {
cout << 你操作有误,请重试!\n;
}
} while (select != 1 && select != 2 && select != 3);
system(cls);
if (select == 3) return 0; //退出
else if (select == 1) ReaderFun(peizhi.txt); //调用读者优先
else WriterFun(peizhi.txt); //调用写者优先
cout << \n是否还有继续? 1. 继续 2.退出\n;
do {
cin >> select;
if (select != 1 && select != 2) {
cout << 你操作有误,请重试!\n;
}
} while (select != 1 && select != 2);
system(cls);
}
return 0;
}
```