Barberos

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 5

Ejercicio 01 (PASCAL):

program segundobar;
const
NSILLAS = 5;
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 ,' esta esperando ');
signal(nuevoCliente);
signal(silla);
wait(barbero);
end
else
begin
signal(silla);
end;
forever
end;

process type Barber(i:integer);


begin
repeat
repeat
begin
wait(nuevoCliente);
wait(silla);
esperar := esperar - 1;
signal(barbero);
signal(silla);
writeln('El barbero ',i,' esta cortando el cabello');
end;
until (esperar = 0);
forever
end;

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;

for i:=1 to cantC do


begin
Customers[i](i);
end;
coend
end.
Ejercicio 02 (PASCAL):
program primercaso;
const
NSILLAS=5;

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;

process type Barber(i:integer);


begin
repeat
repeat
begin
wait(nuevoCliente);
wait(silla);
esperar :=esperar-1;
signal(barbero);
signal(silla);
writeln('el barbero ',i,' corta el pelo al cliente');
end;
until(esperar=0);
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;

for i:=1 to cantC do


begin
Customers[i](i);
end;
coend
end.
Ejercicio 01 (Codeblocks):
#include <iostream>
#include <thread>
#include <semaphore.h>
#include <stdlib.h>

using namespace std;

int Nsillas=5;
sem_t silla;
sem_t nuevoCliente;
sem_t barbero;
int esperar=0;

void cliente(int i){


while(true){
sem_wait(&silla);
if(esperar<Nsillas){
esperar=esperar+1;
cout<<"\n El cliente "<<i<<" esta esperando . . ."<<endl;
sem_post(&nuevoCliente);
sem_post(&silla);
sem_wait(&barbero);
}else{
sem_post(&silla);
}
}
}

void barber(int i){


while(true){
while(esperar != 0){
sem_wait(&nuevoCliente);
sem_wait(&silla);
esperar--;
sem_post(&barbero);
sem_post(&silla);
cout<<"\nEL BARBERO "<<i<<" esta cortando";
}
}
}

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;

process type Customer(i:integer);


begin
repeat
wait(silla);
if esperar < Nsillas then
begin
esperar := esperar + 1;
writeln('Cliente ', i ,' esta esperando ');
signal(nuevoCliente);
signal(silla);
wait(barbero);
end
else
begin
signal(silla);
end;
forever
end;

process type Barber(i:integer);


begin
repeat
repeat
begin
wait(nuevoCliente);
wait(silla);
esperar := esperar - 1;
signal(barbero);
signal(silla);
writeln('El barbero ',i,' esta cortando el cabello');
end;
until (esperar = 0);
forever
end;

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.

También podría gustarte