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

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

2013-07-08 01:38
导读:; //延迟时间 DWORD m_persist; //读文件持续时间 int m_serial; //线程的序号 //从参数中得到信息 m_serial=((ThreadInfo*)(p))-serial ; m_delay=(DWORD)(((ThreadInfo*)(p))-delay *INTE
;  //延迟时间
 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_mutex1=WaitForSingleObject(h_Mutex1,-1);

 //读者进去临界区
 EnterCriticalSection(&cs_Read);

 //阻塞互斥对象Mutex2,保证对readCount的访问和修改互斥
  wait_for_mutex2=WaitForSingleObject(h_Mutex2,-1);
  //修改读者的数目
  readcount++;
  if(readcount==1)
  {
   // 如果是第1个读者,等待写者写完
   EnterCriticalSection(&cs_Write);
  }
  ReleaseMutex(h_Mutex2);// 释放互斥信号 Mutex2
  //让其他读者进去临界区
  LeaveCriticalSection(&cs_Read);
  ReleaseMutex(h_Mutex1);
  //读文件
  printf("Reader thread %d begins to read file.\n",m_serial);
  Sleep(m_persist);

  //退出线程
   printf("Reader thread %d finished reading  file.\n",m_serial);
   //阻塞互斥对象Mutex2,保证对readcount的访问,修改互斥
   wait_for_mutex2=WaitForSingleObject(h_Mutex2,-1);
   readcount--;
   if(readcount==0)

(科教范文网 lw.nSeAc.com编辑发布)


   {
    //最后一个读者,唤醒写者
    LeaveCriticalSection(&cs_Write);
   }
   ReleaseMutex(h_Mutex2);  //释放互斥信号
}
///////////////////////////////////////////
//写者优先---写者线程
//P:写者线程信息


void WP_WriterThread(void *p)
{
 DWORD wait_for_mutex3;            //互斥变量
 DWORD m_delay;                   //延迟时间
 DWORD m_persist;                 //读文件持续时间
 int m_serial;                    //线程序号

 HANDLE h_Mutex3;
 h_Mutex3=OpenMutex(MUTEX_ALL_ACCESS,FALSE,"mutex3");

 //从参数中获得信息
 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 reading require.\n",m_serial);
 wait_for_mutex3=WaitForSingleObject(h_Mutex3,-1);
 writecount++;            &nb

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