Barberos
Barberos
Barberos
program segundobar;
const
NSILLAS = 5;
var
silla, nuevoCliente, barbero: semaphore;
esperar: integer;
const
cantB = 1;
cantC = 3;
var
Barberos : array[1..cantB] of Barber;
Customers: array[1..cantC] of Customer;
i : integer;
begin
esperar := 0;
initial(nuevoCliente, 0);
initial(barbero, 0);
initial(silla, 1);
cobegin
for i:=1 to cantB do
begin
Barberos[i](i);
end;
VAR
silla, nuevoCliente, barbero: SEMAPHORE;
esperar: INTEGER;
process type Customer(i:integer);
begin
repeat
wait(silla);
if esperar < NSILLAS then
begin
esperar :=esperar+1;
writeln('cliente ',i,' está esperando');
sleep(random(1));
signal(nuevoCliente);
signal(silla);
wait(barbero);
end
else
begin
signal(silla);
end;
forever
end;
const
cantB=2;
cantC=3;
var
Barberos: array[1..cantB]of Barber;
Customers: array[1..cantC]of Customer;
i:integer;
begin
esperar:=0;
initial(nuevoCliente,0);
initial(Barbero,0);
initial(silla,1);
cobegin
for i:=1 to cantB do
begin
Barberos[i](i);
end;
int Nsillas=5;
sem_t silla;
sem_t nuevoCliente;
sem_t barbero;
int esperar=0;
int main(){
esperar=0;
sem_init(&nuevoCliente,0,0);
sem_init(&barbero,0,0);
sem_init(&silla,0,1);
thread ba1(&barber,1);
thread cli1(&cliente,1);
thread cli2(&cliente,2);
thread cli3(&cliente,3);
ba1.join();
cli1.join();
cli2.join();
cli3.join();
Ejercicio 01 (Codeblocks):
program segundobar;
const
Nsillas = 5;
var
silla, nuevoCliente, barbero: semaphore;
esperar: integer;
const
Nbar = 1;
Ncli = 3;
var
Barberos : array[1..Nbar] of Barber;
Customers: array[1..Ncli] of Customer;
i : integer;
begin
esperar := 0;
initial(nuevoCliente, 0);
initial(barbero, 0);
initial(silla, 1);
cobegin
for i:=1 to Nbar do
begin
Barberos[i](i);
end;
for i:=1 to Ncli do
begin
Customers[i](i);
end;
coend
end.