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

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

2013-07-08 01:38
导读:DWORD)(((ThreadInfo*)(p))-delay *INTE_PER_SEC); m_persist=(DWORD)(((ThreadInfo*)(p))-persist *INTE_PER_SEC); Sleep(m_delay); printf("Write thread %d sents the writing require.\n",m_serial); //等待资源
DWORD)(((ThreadInfo*)(p))->delay *INTE_PER_SEC);
 m_persist=(DWORD)(((ThreadInfo*)(p))->persist *INTE_PER_SEC);
 Sleep(m_delay);
 
 printf("Write thread %d sents the writing require.\n",m_serial);
 //等待资源
 EnterCriticalSection(&RP_Write);
 //写文件
 printf("Writer thread %d begins to write to the file.\n",m_serial);
 Sleep(m_persist);

 //退出线程
printf("Write thread %d finished 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(NULL,FALSE,"mutex_for_readcount");

 //线程对象的数组
 HANDLE h_Thread[MAX_THREAD_NUM];
 ThreadInfo thread_info[MAX_THREAD_NUM];

 readcount=0;               //初始化readcount
 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>>thread_info[n_thread].delay;

(科教作文网http://zw.ΝsΕAc.Com编辑整理)


  inFile>>thread_info[n_thread++].persist;
  inFile.get();
 }
 for(int i=0;i<(int)(n_thread);i++)
{
  if(thread_info[i].entity==READER||thread_info[i].entity =='r')
  {
   //创建读者进程
   h_Thread[i]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(RP_ReaderThread),&thread_info[i],0,&thread_ID);
  }
  else
  {
   //创建写线程
   h_Thread[i]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(RP_WriterThread),&thread_info[i],0,&thread_ID);
  }

 }
 //等待所有的线程结束
 wait_for_all=WaitForMultipleObjects(n_thread,h_Thread,TRUE,-1);
 printf("All reader and writer have finished operating.\n");
}

////////////////////////////////////////////////////////
//写者优先---读者线程
//P:读者线程信息


void WP_ReaderThread(void *p)
{

 //互斥变量
 HANDLE h_Mutex1;
 h_Mutex1=OpenMutex(MUTEX_ALL_ACCESS,FALSE,"mutex1");
 HANDLE h_Mutex2;
    h_Mutex2=OpenMutex(MUTEX_ALL_ACCESS,FALSE,"mutex2");

 DWORD wait_for_mutex1;            //等待互斥变量所有权
 DWORD wait_for_mutex2;
 DWORD m_delay;                   

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