资源简介
windows操作系统内核实验。读者写者问题。创建一个控制台进程。此进程包含n个线程。用这n个线程来表示n个读者或写者。每个线程按相应测试数据文件要求进行读写操作。用信号量机制分别实现读者优先和写者优先的读者-写者问题。

代码片段和文件信息
//OS_EXP1_ReadAndWrite
//操作系统实验一:读者写者问题
//ReadAndWrite.cpp
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define READER ‘R‘ //读者
#define WRITER ‘W‘ //写者
#define INTE_PER_SEC 1000 //每秒时钟中断数目
#define MAX_THREAD_NUM 64 //最大线程数
#define MAX_FILE_NUM 32 //最大数据文件数目
#define MAX_STR_LEN 32 //字符串长度
int readcount = 0; //读者数目
int writecount = 0; //写者数目
CRITICAL_SECTION RP_Write; //临界区
CRITICAL_SECTION CS_Write; //临界区写
CRITICAL_SECTION CS_Read; //临界区读
struct ThreadInfo{
int serial ; //线程序号
char entity; //线程类别(判断线程是读者还是写者)
double delay; //线程延迟
double persist; //线程读写操作持续时间
};
////////////////////////////////////////////////////////////////////////////////////
//读者优先-----读者线程
//p:读者线程信息
void RP_ReaderThread(void *p){
//互斥变量
HANDLE h_Mutex; //互斥变量
//OpenMutex函数功能:为现有的一个已命名互斥体对象创建一个新句柄
h_Mutex = OpenMutex(MUTEX_ALL_ACCESSFALSE“mutex_for_readcount“);
DWORD wait_for_mutex; //等待互斥变量所有权
DWORD m_delay; //延迟时间
DWORD m_persist; //读文件持续时间
int m_serial; //线程序号
//从参数中获得信息
m_serial = ((ThreadInfo *)(p)) -> serial;
m_delay = (DWORD)(((ThreadInfo *)(p)) -> delay * INTE_PER_SEC); m_persist = (DWORD)(((ThreadInfo *)(p)) -> persist * INTE_PER_SEC); Sleep(m_delay); //延迟等待,然后发出对共享资源的读(写)申请。
printf(“读者线程 %d 申请读文件操作.\n“m_serial);
wait_for_mutex = WaitForSingleobject(h_Mutex-1);
readcount++; //读者数目增加
if(readcount == 1){
EnterCriticalSection(& RP_Write); //第一个读者等待资源
}
ReleaseMutex(h_Mutex); //释放互斥信号
printf(“读者线程 %d 开始读文件.\n“m_serial); //读文件
Sleep(m_persist);
printf(“读者线程 %d 读文件完毕.\n“m_serial); //退出线程
wait_for_mutex = WaitForSingleobject(h_Mutex-1);
readcount--;//读者数目减少
if(readcount == 0){
LeaveCriticalSection(& RP_Write);
}
ReleaseMutex(h_Mutex); //释放互斥信号
}
void RP_WriterThread(void * p) //--------------------------读者优先--写者线程
{
DWORD m_delay; //延迟时间
DWORD m_persist; //写文件持续时间
int m_serial; //线程序号
m_serial = ((ThreadInfo *)(p)) -> serial; //从参数中获得信息
m_delay = (DWORD)(((ThreadInfo *)(p)) -> delay * INTE_PER_SEC);
m_persist = (DWORD)(((ThreadInfo *)(p)) -> persist * INTE_PER_SEC);
Sleep(m_delay); //延迟等待
printf(“写者线程 %d 申请写文件操作.\n“m_serial);
EnterCriticalSection(& RP_Write); //等待资源
printf(“写者线程 %d 开始写文件.\n“m_serial); //写文件
Sleep(m_persist);
printf(“写者线程 %d 写文件完毕.\n“m_serial); //退出线程
LeaveCriticalSection(& RP_Write); //释放资源
}
void ReaderPriority(char * file) //-------------------------读者优先处理函数-
{
DWORD n_thread = 0; //线程数目
DWORD thread_ID; //线程ID
DWORD wait_for_all; //等待所有线程结束
HANDLE h_Mutex; //互斥对象
h_Mutex = CreateMutex(NULLFALSE“mutex_for_readcount“);
HANDLE h_Thread[MAX_THREAD_NUM]; //线程对象的数组
ThreadInfo thread_info[MAX_THR
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 45 2012-10-07 21:31 thread.dat
文件 9674 2012-10-28 23:51 ReadAndWrite.cpp
- 上一篇:操作系统实验报告_读者写者问题.doc
- 下一篇:截图并让图片显示最前面
相关资源
- 读者写者问题(读者优先,写者优先
- 操作系统实验报告哲学家就餐问题、
- 基于RFID技术的读者定位系统
- 读者写者问题linux实现代码
- 使用信号量实现有限缓冲区的生产者
- “超超临界循环流化床锅炉发电技
- 操作系统课设 读者写者 生产者消费
- 操作系统实验完整版川大计科
- 操作系统实验多线程读者写者优先问
- 进程线程之间的同步生产者消费者信
- Windows内核实验教程-陈向群清晰版本非
- 图书管理系统活动图
- 读者与写者问题的实验报告
- 读写者问题读者优先
- 读者写者问题——操作系统完整版内
- 多线程读者阅览室课程设计
- 操作系统课设 Ubuntu下运行读者写者问
- 东华大学 操作系统实验 读者写者问题
- 读者与写者问题源代码+
- 操作系统实验——进程的同步与互斥
- 进程同步读者写者问题
- 操作系统实验报告_读者写者问题.do
- 操作系统实验1用信号量来实现读者
- Linux下的读者写者问题写者优先
- 华南理工大学操作系统实验:读者写
- PV操作实现读者写者问题
评论
共有 条评论