philosophers.cpp
来自「哲学家进餐问题」· C++ 代码 · 共 45 行
CPP
45 行
/********************************************************************
*************** 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 + =
减小字号Ctrl + -
显示快捷键?