semaphore garfo[5];
filosofo(i) {
while (true) {
think();
wait(garfo[i]);
wait(garfo[i+1 % 5]);
eat();
signal(garfo[i]);
signal(garfo[i+1 % 5]);
};
}
Funciona ?
semaphore garfo[5];
filosofo(i) {
while (true) {
think();
if (i != 5) {
wait(garfo[i]);
wait(garfo[i+1 % 5]);
eat();
signal(garfo[i]);
signal(garfo[i+1 % 5]);
} else {
wait(garfo[i+1 % 5]);
wait(garfo[i]);
eat();
signal(garfo[i+1 % 5]);
signal(garfo[i]);
};
};
}
Funciona ?
semaphore escrevendo = 1, lendo = 1;
int leitores = 0;
leitor() {
while (true) {
wait(lendo);
leitores++;
if (leitores == 1) wait(escrevendo);
signal(lendo);
le();
wait(lendo);
leitores--;
if (!leitores) signal(escrevendo);
signal(lendo);
};
}
escritor() {
while (true) {
wait(escrevendo);
escreve();
signal(escrevendo);
}
}
Quando um freguês chega no salão vazio, ele tem que acordar o barbeiro;
Se outros fregueses chegam enquanto o barbeiro está ocupado, eles:
#define CHAIRS 5
semaphore customers = 0,
barbers = 0;
mutex = 1;
int waiting = 0;
Barber(){
while (true) {
wait(customers);
wait(mutex);
waiting--;
signal(barbers);
signal(mutex);
cut_hair();
}
}
Customer(){
wait(mutex);
if (waiting < CHAIRS) {
waiting++;
signal(customers);
signal(mutex);
wait(barbers);
get_haircut();
} else {
signal(mutex);
}
}