⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 哲学家2(vc).txt

📁 操作系统知识
💻 TXT
字号:

	CSyncObject * aStick[6];
	CMultiLock * P[5];

        UINT MyThreadProc( LPVOID pParam );

*****************************************************************

	aStick[0]=new CMutex(FALSE,"Stick0",NULL);
	aStick[1]=new CMutex(FALSE,"Stick1",NULL);
	aStick[2]=new CMutex(FALSE,"Stick2",NULL);
	aStick[3]=new CMutex(FALSE,"Stick3",NULL);
	aStick[4]=new CMutex(FALSE,"Stick4",NULL);
	aStick[5]=aStick[0];                      //new CMutex(FALSE,"Stick0",NULL);


	P[0]=new CMultiLock(&(aStick[0]),2,FALSE);
        P[1]=new CMultiLock(&(aStick[1]),2,FALSE);
	P[2]=new CMultiLock(&(aStick[2]),2,FALSE);
	P[3]=new CMultiLock(&(aStick[3]),2,FALSE);
	P[4]=new CMultiLock(&(aStick[4]),2,FALSE);

	int i;
	for(i=1;i<6;i++)
           { AfxBeginThread(MyThreadProc,&i,THREAD_PRIORITY_NORMAL,0, 0, NULL );
	     Sleep(200);   }
	cin.get();
*****************************************************************
UINT MyThreadProc( LPVOID pParam )
{
	CString str1;
	CString str[5];
	int num,select,result;
	num=*(int *)pParam;
	CEvent threadstart;
	str1.Format("%d",num);//*(int *)pParam);
	threadstart.SetEvent();
	do
	{
	str[0]="第"+str1+"个哲学家正在思考, 是否要吃饭 ";
	MessageBox(0,str[0],str1+"哲学家", MB_OK|MB_ICONEXCLAMATION);
	str[1]="第"+str1+"个哲学家想吃饭,要求使用筷子,";
	MessageBox(0,str[1],str1+"哲学家", MB_OK|MB_ICONEXCLAMATION);
	(* P[num-1]).Lock();
	str[2]="第"+str1+"个哲学家正在使用筷子,是否吃完 ";
	MessageBox(0,str[2],str1+"哲学家", MB_OK|MB_ICONEXCLAMATION);
    str[3]="第"+str1+"个哲学家筷子使用完毕,准备通告 ";
	MessageBox(0,str[3],str1+"哲学家", MB_OK|MB_ICONEXCLAMATION);
    (* P[num-1]).Unlock();
	str[4]="第"+str1+"个哲学家通告完毕, 是否继续 ";
	//select=MessageBox(0,str[4],str1+"哲学家", MB_OKCANCEL|MB_ICONQUESTION);
    threadstart.Lock();
	result=::WaitForSingleObject(threadstart.m_hObject,2000);
	if (result ==WAIT_OBJECT_0)
	  select=0;
	else
		select=1;

	}
	while (select==1);
	return 0;
}
*****************************************************************
UINT MyThreadProc1( LPVOID pParam )
{


	CString str1;
	CString str[5];
	int num,select;
	num=*(int *)pParam;
	str1.Format("%d",num);//*(int *)pParam);
	do
	{
		str[0]="第"+str1+"个哲学家正在思考, 是否要吃饭 ";
		MessageBox(0,str[0],str1+"哲学家", MB_OK|MB_ICONEXCLAMATION);
		//str[1]="第"+str1+"个哲学家想吃饭,要求使用筷子,想拿右筷子";
		//MessageBox(0,str[1],str1+"哲学家", MB_OK|MB_ICONEXCLAMATION);
		if (num!=5)
		{
			str[1]="第"+str1+"个哲学家想吃饭,要求使用筷子,想拿右筷子";
			MessageBox(0,str[1],str1+"哲学家", MB_OK|MB_ICONEXCLAMATION);
			(* aStick[num-1]).Lock();
			MessageBox(0,"第"+str1+"个哲学家正拿着右筷子,正想拿左筷子",str1+"哲学家", MB_OK|MB_ICONEXCLAMATION);
			(* aStick[num]).Lock();
		}
		else
		{
			str[1]="第"+str1+"个哲学家想吃饭,要求使用筷子,想拿左筷子";
			MessageBox(0,str[1],str1+"哲学家", MB_OK|MB_ICONEXCLAMATION);
			(* aStick[0]).Lock();
    		MessageBox(0,"第"+str1+"个哲学家正拿着左筷子,正想拿右筷子",str1+"哲学家", MB_OK|MB_ICONEXCLAMATION);
			(* aStick[4]).Lock();
		}
		MessageBox(0,"第"+str1+"个哲学家拿到一双筷子,正在吃饭!是否吃完?",str1+"哲学家", MB_ICONEXCLAMATION);
		//Sleep(100);
		//str[2]="第"+str1+"个哲学家正在使用筷子,是否吃完 ";
		//MessageBox(0,str[2],str1+"哲学家", MB_OK|MB_ICONEXCLAMATION);
		str[3]="第"+str1+"个哲学家筷子使用完毕,准备通告 ";
		MessageBox(0,str[3],str1+"哲学家", MB_OK|MB_ICONEXCLAMATION);
		(* aStick[num-1]).Unlock();
		(* aStick[num%5]).Unlock();
		str[4]="第"+str1+"个哲学家通告完毕, 是否继续 ";
		select=MessageBox(0,str[4],str1+"哲学家", MB_OKCANCEL|MB_ICONQUESTION);
	}
	while (select==1);
	return 0;
}
*****************************************************************

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -