基于C++的读者与写者问题read—write problem的实现(一)(3)
作者:佚名; 更新时间:2019-07-20

nbsp;         //线程类别(判断是读者还是写者线程)
 double delay;                    //线程延迟时间
 double persist;                  //线程读写操作时间
};
///////////////////////////////////////////////////////////////////////////
// 读者优先---读者线程
//P:读者线程信息

void RP_ReaderThread(void *p)
{
 //互斥变量
 HANDLE h_Mutex;
 h_Mutex=OpenMutex(MUTEX_ALL_ACCESS,FALSE,"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);
 
 //等待互斥信号,保证对ReadCount 的访问,修改互斥
 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);
 //等待互斥信号,保证对ReadCount的访问,修改互斥
 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=(

核心期刊快速发表
Copyright@2000-2030 论文期刊网 Corporation All Rights Reserved.
《中华人民共和国信息产业部》备案号:ICP备07016076号;《公安部》备案号:33010402003207
本网站专业、正规提供职称论文发表和写作指导服务,并收录了海量免费论文和数百个经国家新闻出版总署审批过的具有国内统一CN刊号与国际标准ISSN刊号的合作期刊,供诸位正确选择和阅读参考,免费论文版权归原作者所有,谨防侵权。联系邮箱:256081@163.com