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

📄 philosophers.cpp

📁 哲学家进餐问题
💻 CPP
字号:
/********************************************************************
***************         2003144025 - 2006-11          ***************
                           哲学家进餐问题
*********************************************************************/
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
const int num=5;                      //筷子数
DWORD WINAPI Philos(LPVOID lpParam);

HANDLE  chopstick[num];              

HANDLE	hMutex;
DWORD   dwThreadId[num];
DWORD	dwThrdParam[num];
HANDLE	hThread[num];                

void main()
{
	for(int j=0;j<num;j++)
	{
      chopstick[j]=CreateMutex(NULL,FALSE,"NameOfMutexObject");//创建互斥锁
	  hThread[j]=CreateThread(NULL,1,Philos,&dwThrdParam[j],0,&dwThreadId[j]);	//创建线程
	  getch();
	}
}


DWORD WINAPI Philos(LPVOID lpParam)
{
	do {	
		for(int k=0;k<num;k++)
		{
		WaitForSingleObject(chopstick[k], INFINITE);       //拿起筷子1
        WaitForSingleObject(chopstick[(k+1) %5], INFINITE);//拿起筷子2
	    cout<<"Philos ["<<k+1<<"] is eating "<<"who get chopstick:"<<k<<"+"<<(k+1) % 5<<endl;//吃饭
	    ReleaseMutex(chopstick[k]);	                       //放下筷子1
        ReleaseMutex(chopstick[(k+1)% 5]);                 //放下筷子2
		}
	} while (true);
	return 0;
}

⌨️ 快捷键说明

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