Codigo Lamport y Heisenberg
Codigo Lamport y Heisenberg
Codigo Lamport y Heisenberg
INTEGRANTES:
1. Alejandro Yanapa 2018-119003
2. Ribaldo Saira 2018-119011
3. Richard Tarqui 2018-119006
4. Daniel Chique 2018-119005
5. Kevin Caxi 2018-119023
CÓDIGO DE LAMPORT
#include <iostream>
#include <thread>
#include <stdlib.h>
#define Tam 4
int numero[Tam]={0,0,0,0};
bool eligiendo[Tam]={false,false,false,false};
int Max;
int turno=0;
void Mostrar(int o){
std::cout<<"\nSoy la seccion critica "<<o<<"\n";
}
int max(int vector[]){
Max=0;
for(int k=0;k<Tam;k++){
while(vector[k]>Max){
Max=vector[k];
}
}
return Max;
}
void hilo(int i){
while(1==1){
eligiendo[i]=true;
numero[i]= 1 + max(numero);
eligiendo[i]=false;
for(int j=0;j<Tam;j++){
while(eligiendo[j]==true){
}
while((numero[j]!=0)&&((numero[j])<(numero[i]))){
}
}
Mostrar(i);
numero[i]=0;
}
}
int main(){
p0.join();
p1.join();
p2.join();
p3.join();
}
CÓDIGO DE HEISENBERG
#include <iostream>
#include <thread>
const int n = 8;
int Deseo = 1;
int Activo = 2;
int Inactivo = 3;
int Senal[n];
int turno;
void Eisen(int i) {
int j;
do {
Senal[i] = Deseo ;
j = turno;
while (j != i) {
if (Senal[j] != Inactivo)
j = turno;
else
j = (j + 1) % n;
}
Senal[i] = Activo;
j = 0;
while ((j < n) && ((j == i) || (Senal[j] != Activo)))
{
j++;
}
} while (!((j >= n) && ((turno == i) || (Senal[turno] ==
Inactivo))));
turno = i;
j = (turno + 1) % n;
turno = j;
Senal[i] = Inactivo;
}
int main()
{
turno = 0;
for (int j = 0; j < n; j++)
{
Senal[j] = Inactivo;
}
thread ts[n];
return 0;
}
Programa LAMPORT:
Programa HEISENBERG: