Witam. Napisałem taki programik, lecz mam problem z kompilacją. Mógłby ktoś zerknąć i zobaczyć co jest nie tak??
#include
#include
#include
#include
using namespace std;
Lock * barberchair = new Lock("barber chair");
Semaphore * inchair = new Semaphore("customer in chair",0);
Semaphore * barber = new Semaphore("barber",0);
Lock * waitingroom = new Lock("waiting room");
const int HAIRCUT_DELAY = 1000;
const int NUM_WAITING_CHAIRS = 5;
int numWaiting = 0;
void Barber ( void * ) {
for ( ; true ; ) {
cout << kernel->currentThread->getName() << " waiting for customers"
<< endl;
inchair->P();
cout << kernel->currentThread->getName() << " cutting hair"
<< endl;
kernel->alarm->WaitUntil(HAIRCUT_DELAY);
cout << kernel->currentThread->getName() << " finished haircut"
<< endl;
barber->V();
}
}
void Customer ( void * ) {
waitingroom->Acquire();
if ( numWaiting >= NUM_WAITING_CHAIRS ) {
cout << kernel->currentThread->getName()
<< ": no room in waiting room; leaving without haircut" << endl;
waitingroom->Release();
return;
} else {
numWaiting++;
waitingroom->Release();
}
cout << kernel->currentThread->getName() << " waiting in waiting room"
<< endl;
barberchair->Acquire();
cout << kernel->currentThread->getName() << " in barber chair"
<< endl;
waitingroom->Acquire();
numWaiting--;
waitingroom->Release();
cout << kernel->currentThread->getName() << " waking barber" << endl;
inchair->V();
cout << kernel->currentThread->getName()
<< " waiting for haircut to finish" << endl;
barber->P();
cout << kernel->currentThread->getName() << " haircut complete; leaving"
<< endl;
barberchair->Release();
}
void BarberTest () {
Thread * barber = new Thread("barber");
barber->Fork((VoidFunctionPtr)Barber,NULL);
for ( int ctr = 0 ; ctr < 20 ; ctr++ ) {
char * name = new char[12];
sprintf(name,"customer %d",ctr);
Thread * customer = new Thread(name);
customer->Fork((VoidFunctionPtr)Customer,NULL);
kernel->alarm->WaitUntil(rand()%500 + 100);
}