利用AND型信号量解决哲学家进餐问题,要windows下的C/C++的完整源代码程序.(五个哲学家五只筷子)
- 提问者网友:不要迷恋哥
- 2021-07-28 08:10
- 五星知识达人网友:上分大魔王
- 2021-07-28 08:35
// 哲学家进餐问题
#define WIN32_LEAN_AND_MEAN
#include
#include
#include
DWORDWINAPIPhilosoperThreadFunc(LPVOID);
#define PHILOSOPERS 5
HANDLE chop_sticks[PHILOSOPERS];
HANDLE threads[PHILOSOPERS];
intmain(int argc,char** argv)
{
for(inti=0;i
再问: 怎么我在VS2010下运行后不能停下来呢?。能帮忙改改成能停下的吗?只要5个哲学家都吃完了就行了,就停止下来吧,只要求输出他们谁想吃/正在吃/还有最后吃完了就行了。我这些确实不怎么懂帮一下忙吧,谢谢!
再答: DWORD WINAPI PhilosoperThreadFunc(LPVOID n) { int i=(int)n; HANDLE my_chop_sticks[2]; my_chop_sticks[0]=chop_sticks[i]; my_chop_sticks[1]=chop_sticks[(i-1>0)?i-1:PHILOSOPERS]; srand(GetTickCount()); //while(1){ Sleep((rand()%8)*500+500); printf(Philosopher #%d want to eat\n,i); WaitForMultipleObjects(2,my_chop_sticks,TRUE,0); printf(Philosopher #%d is eating\n,i); ReleaseMutex(my_chop_sticks[0]); ReleaseMutex(my_chop_sticks[1]); printf(Philosopher #%d finished his dinner\n,i); //} } 把while(1)这个循环拿掉
再问: 谢啦哈....