• 大小: 86KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-14
  • 语言: 其他
  • 标签: 东华大学  

资源简介

1 实验目标 能够编写程序模拟读者 写者问题 2 实验要求 在Windows2000环境下 创建一个控制台进程 此进程包含n个线程 用这n个线程来表示n个读者或写者 每个线程按相应测试数据文件 后面有介绍 的要求进行读写操作 用信号量机制分别实现读者优先和写者优先的读者 写者问题 读者 写者问题的读写操作限制 包括读者优先和写者优先 : 1 写 写互斥 即不能有两个写者同时进行写操作 2 读 写互斥 即不能同时有一个线程在读 而另一个线程在写 3 读 读允许 即可以有一个或多个读者在读 读者优先的附加限制:如果一个读者申请进行读操作时已有另一个读者正在进行读操作 则该读者可直接开始读操作 写者优先的附加限制:如果一个读者申请进行读操作时已有另一写者在等待访问共享资源 则该读者必须等到没有写者处于等待状态后才能开始读操作 运行结果显示要求:要求在每个线程创建 发出读写操作申请 开始读写操作和结束读写操作时分别显示一行提示信息 以确定所有处理都遵守相应的读写操作限制 ">1 实验目标 能够编写程序模拟读者 写者问题 2 实验要求 在Windows2000环境下 创建一个控制台进程 此进程包含n个线程 用这n个线程来表示n个读者或写者 每个线程按相应测试数据文件 后面有介绍 的要求进行读写操 [更多]

资源截图

代码片段和文件信息

#include  “windows.h“
#include  
#include  
#include  
#include  
#include  
#include  


#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;
  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 (“Reader thread %d sents the reading require.\n“m_serial);
  wait_for_mutex=WaitForSingleobject(h_Mutex-1);
  readcount++;
  if(readcount==1)
  {
  EnterCriticalSection(&RP_Write);
  }
  ReleaseMutex(h_Mutex);
  printf(“Reader thread %d begins to read file.\n“m_serial);
  Sleep(m_persist);
  printf(“Reader thread %d finished reading file.\n“m_serial);
  wait_for_mutex=WaitForSingleobject(h_Mutex-1);
  readcount--;
  if(readcount==0)
  {
  LeaveCriticalSection(&RP_Write);
  }
  ReleaseMutex(h_Mutex);
}
//////////////////////////////////////////////////////////////////////////
//读者优先--写者线程
//p:写者线程信息
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(“Writer thread %d sents the writing require.\n“m_serial);
   EnterCriticalSection(&RP_Write);
   printf(“Writer thread %d begins to write the  file.\n“m_serial);
   Sleep(m_persist);
   printf(“Writer thread %d finishing writing to the file.\n“m_serial);
   LeaveCriticalSection(&RP_Write);
}
/////////////////////////////////////////////////////////////////
//读者优先处理函数
//file:文件名
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_THREAD_NUM];
readcount=0;
InitializeCriticalSection(&RP_Write);
ifstream inFile;
inFile.open(file);
printf(“Reader Priority:\n\n“);
while(inFile)//读人每一个读者、写者的信息
{
inFile>>thread_info[n_thread].serial;
        inFile>>thread_info[n_thread].entity;
        inFile>>t

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件          43  2013-10-16 17:05  thread.dat
     文件        8394  2013-10-16 17:20  读者写者问题.cpp
     文件      137728  2014-02-12 00:23  实验报告.doc

评论

共有 条评论