📄 philosophers.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 + -