Пользователь
Регистрация: 15.12.2010
Сообщений: 74
|
Обедающие философы с использованием событий (events)
Привет всем. Собственно, сабж. Может, у кого-нибудь завалялся примерчик, или не составит труда помочь с кодом? Буду очень благодарен.
UPD.
Попытался что-то сделать, вышло как-то не очень. Собственно, помогите исправить этот недокод или дайте годный совет. Спасибо.
PHP код:
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <iostream.h>
#include <conio.h>
HANDLE hThr1, hThr2, hThr3, hThr4, hThr5;
HANDLE hEvent1, hEvent2, hEvent3, hEvent4, hEvent5;
unsigned long uThrID1,uThrID2, uThrID3, uThrID4, uThrID5;
void phil1(void* pParams)
{
WaitForSingleObject (hEvent1, INFINITE);
ResetEvent(hEvent1);
if (WaitForSingleObject(hEvent2, 20)==WAIT_OBJECT_0)
{
ResetEvent(hEvent2);
cout << "phil1" <<endl;
getch();
SetEvent(hEvent2);
SetEvent(hEvent1);
Sleep(5000);
}
else SetEvent(hEvent1);
}
void phil2(void* pParams)
{
WaitForSingleObject (hEvent2, INFINITE);
ResetEvent(hEvent2);
if (WaitForSingleObject(hEvent3, 20)==WAIT_OBJECT_0)
{
ResetEvent(hEvent3);
cout << "phil2" <<endl;
getch();
SetEvent(hEvent3);
SetEvent(hEvent2);
Sleep(5000);
}
else SetEvent(hEvent2);
}
void phil3(void* pParams)
{
WaitForSingleObject (hEvent3, INFINITE);
ResetEvent(hEvent3);
if (WaitForSingleObject(hEvent4, 20)==WAIT_OBJECT_0)
{
ResetEvent(hEvent4);
cout << "phil3" <<endl;
getch();
SetEvent(hEvent4);
SetEvent(hEvent3);
Sleep(5000);
}
else SetEvent(hEvent3);
}
void phil4(void* pParams)
{
WaitForSingleObject (hEvent4, INFINITE);
ResetEvent(hEvent4);
if (WaitForSingleObject(hEvent5, 20)==WAIT_OBJECT_0)
{
ResetEvent(hEvent5);
cout << "phil4" <<endl;
getch();
SetEvent(hEvent5);
SetEvent(hEvent4);
Sleep(5000);
}
else SetEvent(hEvent4);
}
void phil5(void* pParams)
{
WaitForSingleObject (hEvent5, INFINITE);
ResetEvent(hEvent5);
if (WaitForSingleObject(hEvent1, 20)==WAIT_OBJECT_0)
{
ResetEvent(hEvent1);
cout << "phil5" <<endl;
getch();
SetEvent(hEvent1);
SetEvent(hEvent5);
Sleep(5000);
}
else SetEvent(hEvent5);
}
int main()
{
hEvent1 = CreateEvent (NULL, FALSE, TRUE, NULL);
hEvent2 = CreateEvent (NULL, FALSE, TRUE, NULL);
hEvent3 = CreateEvent (NULL, FALSE, TRUE, NULL);
hEvent4 = CreateEvent (NULL, FALSE, TRUE, NULL);
hEvent5 = CreateEvent (NULL, FALSE, TRUE, NULL);
hThr1 = CreateThread (NULL,0,(LPTHREAD_START_ROUTINE)phil1,NULL,0,&uThrID1);
hThr2 = CreateThread (NULL,0,(LPTHREAD_START_ROUTINE)phil2,NULL,0,&uThrID2);
hThr3 = CreateThread (NULL,0,(LPTHREAD_START_ROUTINE)phil3,NULL,0,&uThrID3);
hThr4 = CreateThread (NULL,0,(LPTHREAD_START_ROUTINE)phil4,NULL,0,&uThrID4);
hThr5 = CreateThread (NULL,0,(LPTHREAD_START_ROUTINE)phil5,NULL,0,&uThrID5);
return 0;
}
Последний раз редактировалось RAZOR1703; 23.10.2011 в 20:05.
|