www.pudn.com > DINPHIL.rar > DINPHIL.CPP


//dinphil.cpp 
 
 
#include 
#include 
#include 
 
const INT numPhilosophers=3; 
HANDLE chopsticks[numPhilosophers]; 
CHAR csStat[numPhilosophers+1]; 
CHAR pStat[numPhilosophers+1]; 
 
void PhilosopherThread(INT id) 
{ 
 while (1) 
 { 
	 //thinking 
   Sleep(GetTickCount() % 50); 
 
   //hungry,so picks up chopsticks 
   WaitForSingleObject(chopsticks[id], 
	   INFINITE); 
   csStat[id]='1'; 
   WaitForSingleObject( 
	   chopsticks[(id+1)%numPhilosophers], 
	   INFINITE); 
   csStat[(id+1)%numPhilosophers]='1'; 
   pStat[id]='1'; 
 
   // eating 
   cout << csStat << " " << pStat << endl; 
   Sleep(GetTickCount() % 50); 
 
   pStat[id]='0'; 
   // done eating 
   ReleaseMutex(chopsticks[id]); 
   csStat[id]='0'; 
   ReleaseMutex( 
	   chopsticks[(id+1)%numPhilosophers]); 
   csStat[(id+1)%numPhilosophers]='0'; 
 } 
} 
 
void main(void) 
{ 
	HANDLE handles[numPhilosophers]; 
	DWORD threadID; 
	INT i; 
 
	csStat[numPhilosophers]='\0'; 
	pStat[numPhilosophers]='\0'; 
 
	//Create the chopstick mutexes 
	for (i=0;i