📄 bank02.cpp
字号:
#include "bank02.h"
#include "time.h"
#include "iostream.h"
int main()
{
HANDLE hThread[N];
// hMutex[M]==CreateMutex(NULL, TRUE, NULL);
srand((unsigned)time (NULL));
{for(int i = 0; i < M; i++)
{
r[i] = (rand() % Z) + 1;
hMutex[M]=CreateMutex(NULL, TRUE, NULL);
for (DWORD j = 0; j < r[i]; j++)
{
ReleaseMutex(hMutex[i]);
}
cout<<r[i];
}
cout<<endl;}
for(int i = 0; i < N; i++)
{
hThread[i]=CreateThread(NULL, 0, FunBank, id, 0, NULL);
}
sem=CreateMutex(NULL, FALSE, NULL);
Sleep(N*30+3000);
return 0;
}
DWORD WINAPI FunBank(LPVOID lpParameter)
{
DWORD max[M], used[M]; //最大需求资源,已分配资源
BOOL ok = TRUE; //需求状态标识
DWORD ThreadId = GetCurrentThreadId();
{cout<<ThreadId<<":";
for(int i = 0; i < M; i++)
{
max[i] = (rand() % Z) + 1;
used[i] = Z;
while (used[i] >= max[i])
{
used[i] = rand() % Z;
}
cout<<max[i]<<" ";
cout<<"("<<used[i]<<") ";
}
cout<<endl;}
Sleep(10);
BOOL tem = TRUE;
while(tem)
{
WaitForSingleObject(sem, INFINITE);
int result = TRUE;
{for(int i = 0; i < M; i++)
{
if (r[i] < (max[i] - used[i]))
{
result = FALSE;
}
}}
if (result)
{
for(int i = 0; i < M; i++)
{
for(DWORD j = 0; j < max[i] - used[i]; j++)
{
WaitForSingleObject(hMutex[i], INFINITE);
}
}
tem = FALSE;
}
ReleaseMutex(sem);
Sleep(10);
}
cout<<ThreadId<<">";
{WaitForSingleObject(sem, INFINITE);
for(int i = 0; i < M; i++)
{
for(DWORD j = 0; j < max[i]; j++)
{
ReleaseMutex(hMutex[i]);
}
}
ReleaseMutex(sem);}
Sleep(10);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -