Está en la página 1de 5

Algoritmo de 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(){

std::cout<<"Algoritmo de Lamport \n";


std::thread p0(hilo,0);
std::thread p1(hilo,1);
std::thread p2(hilo,2);
std::thread p3(hilo,3);

p0.join();
p1.join();
p2.join();
p3.join();

}
CÓDIGO DE HEISENBERG
#include <iostream>
#include <thread>

using namespace std;

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;

cout << "thread " << i << " is running\n";

j = (turno + 1) % n;

while (Senal[j] == Inactivo) {


j = (j + 1) % n;
}

turno = j;
Senal[i] = Inactivo;
}
int main()
{
turno = 0;
for (int j = 0; j < n; j++)
{
Senal[j] = Inactivo;
}

thread ts[n];

for (int i = 0; i < n; i++)


{
ts[i] = thread(Eisen, i);
}
for (int i = 0; i < n; i++)
{
ts[i].join();
}

return 0;
}

Programa LAMPORT:
Programa HEISENBERG:

También podría gustarte