计算机应用 | 古代文学 | 市场营销 | 生命科学 | 交通物流 | 财务管理 | 历史学 | 毕业 | 哲学 | 政治 | 财税 | 经济 | 金融 | 审计 | 法学 | 护理学 | 国际经济与贸易
计算机软件 | 新闻传播 | 电子商务 | 土木工程 | 临床医学 | 旅游管理 | 建筑学 | 文学 | 化学 | 数学 | 物理 | 地理 | 理工 | 生命 | 文化 | 企业管理 | 电子信息工程
计算机网络 | 语言文学 | 信息安全 | 工程力学 | 工商管理 | 经济管理 | 计算机 | 机电 | 材料 | 医学 | 药学 | 会计 | 硕士 | 法律 | MBA
现当代文学 | 英美文学 | 通讯工程 | 网络工程 | 行政管理 | 公共管理 | 自动化 | 艺术 | 音乐 | 舞蹈 | 美术 | 本科 | 教育 | 英语 |

基于C++的读者与写者问题read—write problem的实现(4)

2013-07-08 01:38
导读:nbsp; //线程类别(判断是读者还是写者线程) double delay; //线程延迟时间 double persist; //线程读写操作时间 }; ///////////////////////////////////////////////////////////////
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);
 //读者数目增加 (科教范文网 fw.nseac.com编辑发布)
 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=(

上一篇:C# 考务和成绩管理系统(一)毕业论文 下一篇:没有了