algoritmos de decker

Iniciado por include ();, 28 Septiembre 2012, 07:51 AM

0 Miembros y 1 Visitante están viendo este tema.

include ();

compañeros necesito de su ayuda  :-( no se como programar los algoritmos de decker...del 1 al 4 tienen errores es decir se me tienen que bloquear pero no logro hacerlos y el 5to si me tiene q funcionar pero no le entiendo  :( alguien que me ayude por favor... se lo agradecería mucho...

esto es lo que tengo...
Algoritmo No. 1

#include <conio.h>
#include <iostream.h>
void proceso1();
void proceso2();
void regionCritica(int turno);
int turno;
  int pid;
int main()
{
  turno = 1;
  proceso1();
  proceso2();
  system("pause");
  return 0; 
}
void proceso1()
{
          while(true)
          {
           cout <<"proceso 1 entrando a region critica....\n";
           while(turno == 2)
           {
           }
            cout<<"Proceso 1 esta en region critica...\n";
            regionCritica(turno);
            turno = 2;
            cout << "Proceso 1 saliendo de region critica...\n\n\n";
          }           
}
void proceso2()
{
          while(true)
          {
           cout <<"Proceso 2 entrando a region Critica";
           while(turno == 1)
           {
           }
           cout <<"Proceso 2 dentro de region critica...\n";
           regionCritica(turno);
           turno = 1;
           cout << "Proceso 2 saliendo de region critica...\n\n\n";
          }
}
void regionCritica(int turno)
{
     int temp;
     temp = turno;
     cout<<temp++<<"\n\n";
}




Algoritmo No. 2

#include <conio.h>
#include <iostream.h>
#include <windows.h>
void regionCritica();
void Proceso1();
void Proceso2();
bool bandera_proceso1,bandera_proceso2;

int main()
{
  bandera_proceso1 = false;
  bandera_proceso2 = false;
  Proceso1();
  Proceso2();
  return 0;
}

void Proceso1()
{
     while(true)
     {
      cout <<"Entrando region Critica proceso1\n";
      bandera_proceso1 = true;
      while(bandera_proceso2)
      {
      }
      cout <<"Proceso1 esta en region Critica\n";
      //system("pause");
      regionCritica();
      bandera_proceso1 = false;
      cout <<"Proceso1 saliendo de region Critica\n";
     }
}

void Proceso2()
{
     while(true)
     {
      cout <<"Proceso2 entrando a region Critica\n";
      bandera_proceso2 = true;
      while(bandera_proceso1)
      {
      }
      cout<<"Proceso2 Esta en region Critica\n";
      //system("pause");
      regionCritica();
      bandera_proceso2 = false;
      cout <<"Proceso2 saliendo de region Critica\n";
     }
}
void regionCritica()
{
     int temp=0;
     cout<<temp++<<endl<<endl;
     Sleep(3000);
}




Gracias por cualquier ayuda...
Grandeza no es solo saber, Grandeza es ayudar y compartir!!!

n0z

El algoritmo 1:

Cuando lo ejecutas, supongo que se te quedara en un bucle infinito, ya que la función proceso1(): Tienes el while(true) y en el main la variable turno = 1, entonces nunca entraría en el segundo while, por lo que te mostrara continuamente "proceso 1 entrando a region critica"

¿Te pasa eso?




include ();

#2
Gracias por responder N0Z y si me pasa eso que me dijiste, por eso digo que no se como arreglarlo  :( me cuesta C++...

aqui estan los 5 algoritmos de decker http://aprendiendo-software.blogspot.com/search/label/Algoritmo pero no se como programarlos ya lo probe todo y nada  :-(

Mil gracias por tu ayuda
Grandeza no es solo saber, Grandeza es ayudar y compartir!!!

n0z

No se que conocimientos tienes de programación, pero yo no me pondría con programación concurrente antes de tener una buena base.

De todas maneras busca por google información sobre programación concurrente.

include ();

mis conocimientos en c++ son basicos...esto es una tarea que me dejaron de los 5 algoritmos de decker...lo que pido no es que me den el codigo, sino que me guien...es decir que me digan del codigo que pase que debo cambiar o que tengo mal, asi hare mi tarea y aprendere de los expertos  :P... lo malo que esto es para mañana  :( :-(


Siempre muy agradecido...
Grandeza no es solo saber, Grandeza es ayudar y compartir!!!