-
课程设计涉及到读者写者问题
资源介绍
初始条件:
1操作系统:Linux 或者 windows
2程序设计语言:C,java语言
3设有20个连续的存储单元,写入/读出的数据项按增序设定为1-20这20个字符。
要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
1.技术要求:
1)为每个读者/写者产生一个线程,设计正确的同步算法
2)每个读者/写者对该存储区进行操作后,即时显示该存储区的全部内容、当前指针位置和读者/写者线程的自定义标识符。。
3)读者应有3个以上,写者应有有两个以上。
4)多个读者/写者之间须共享对存储区进行操作的函数代码。
2. 设计说明书内容要求:
1)设计题目与要求
2)总的设计思想及系统平台、语言、工具等。
3)数据结构与模块说明(功能与流程图)
4)给出用户名、源程序名、目标程序名和源程序及其运行结果。(要注明存储各个程序及其运行结果的主机IP地址和目录。)
5)运行结果与运行情况
(提示: (1)连续存储区可用数组实现。
(2)编译命令可用: cc -lpthread -o 目标文件名 源文件名
(3)多线程编程方法参见附件。)
3. 调试报告:
1) 调试记录
2) 自我评析和总结
上机时间安排:
19周一 ~ 五 下午14:00 - 18:00 (6月27日开始)
指导教师签名: 年 月 日
系主任(或责任教师)签名: 年 月 日
五、源代码
#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"<>select;
if(select!='1' && select!='2' && select!='3')
cout<<"你操作有误,请重试!"<>select;
if(select!='1' && select!='2' )
cout<<"你操作有误,请重试!"<