Собственно, этим все сказанно. Пытался написать программку - ничего из этого не вышло. На всякий случай, прикреплю этот позор:
Код:
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <iostream.h>
#include <time.h>
HANDLE hEvent1, hEvent2, hEvent3, hEvent4, hEvent5;
HANDLE hThr1, hThr2, hThr3, hThr4, hThr5;
HANDLE h;
unsigned long uThrID1, uThrID2, uThrID3, uThrID4, uThrID5;
void Philosopher1 (void* pParams)
{
while (1)
{
int i, timeeat;
srand(time(NULL));
WaitForSingleObject(hEvent1, INFINITE);
WaitForSingleObject(hEvent2, 10);
ResetEvent(hEvent1);
ResetEvent(hEvent2);
timeeat = rand()%15;
cout << "First Philosopher: " << endl;
for (i = 0; i<timeeat; i++)
cout << "HOM-nom-NOM-";
cout << endl << "Okay, I've finished. Let's think about 42...";
}
SetEvent(hEvent1);
SetEvent(hEvent2);
}
void Philosopher2 (void* pParams)
{
while (1)
{
int i, timeeat;
srand(time(NULL));
WaitForSingleObject(hEvent2, INFINITE);
WaitForSingleObject(hEvent3, 10);
ResetEvent(hEvent2);
ResetEvent(hEvent3);
timeeat = rand()%15;
h=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(h,FOREGROUND_GREEN);
cout << "Second Philosopher: " << endl;
for (i = 0; i<timeeat; i++)
cout << "HOM-nom-NOM-";
cout << endl << "Okay, I've finished. Let's think about 42...";
}
SetEvent(hEvent2);
SetEvent(hEvent3);
}
void Philosopher3 (void* pParams)
{
while (1)
{
int i, timeeat;
srand(time(NULL));
WaitForSingleObject(hEvent3, INFINITE);
WaitForSingleObject(hEvent4, 10);
ResetEvent(hEvent3);
ResetEvent(hEvent4);
timeeat = rand()%15;
h=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(h,FOREGROUND_RED);
cout << "Third Philosopher: " << endl;
for (i = 0; i<timeeat; i++)
cout << "HOM-nom-NOM-";
cout << endl << "Okay, I've finished. Let's think about 42...";
}
SetEvent(hEvent3);
SetEvent(hEvent4);
}
void Philosopher4 (void* pParams)
{
while (1)
{
int i, timeeat;
srand(time(NULL));
WaitForSingleObject(hEvent4, INFINITE);
WaitForSingleObject(hEvent5, 10);
ResetEvent(hEvent4);
ResetEvent(hEvent5);
timeeat = rand()%15;
h=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(h,FOREGROUND_BLUE);
cout << "Fourth Philosopher: " << endl;
for (i = 0; i<timeeat; i++)
cout << "HOM-nom-NOM-";
cout << endl <<"Okay, I've finished. Why the hell am I blue?";
}
SetEvent(hEvent4);
SetEvent(hEvent5);
}
void Philosopher5 (void* pParams)
{
while (1)
{
int i, timeeat;
srand(time(NULL));
WaitForSingleObject(hEvent5, INFINITE);
WaitForSingleObject(hEvent1, INFINITE);
ResetEvent(hEvent5);
ResetEvent(hEvent1);
timeeat = rand()%15;
h=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(h,FOREGROUND_RED|FOREGROUND_INTENSITY);
cout << "Fifth Philosopher: " << endl;
for (i = 0; i<timeeat; i++)
cout << "HOM-nom-NOM-";
cout << endl <<"Okay, I've finished. And I hate my color too.";
}
SetEvent(hEvent5);
SetEvent(hEvent1);
}
int main(void)
{
hEvent1 = CreateEvent (NULL, TRUE, TRUE, NULL);
hEvent2 = CreateEvent (NULL, TRUE, TRUE, NULL);
hEvent3 = CreateEvent (NULL, TRUE, TRUE, NULL);
hEvent4 = CreateEvent (NULL, TRUE, TRUE, NULL);
hEvent5 = CreateEvent (NULL, TRUE, TRUE, NULL);
hThr1 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE) Philosopher1, NULL,
0,&uThrID1);
hThr2 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE) Philosopher2, NULL,
0,&uThrID2);
hThr3 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE) Philosopher3, NULL,
0,&uThrID3);
hThr4 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE) Philosopher4, NULL,
0,&uThrID4);
hThr5 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE) Philosopher5, NULL,
0,&uThrID5);
return 0;
}