Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: include (); en 28 Septiembre 2012, 07:51 am



Título: algoritmos de decker
Publicado por: include (); en 28 Septiembre 2012, 07:51 am
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
Código:
#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
Código:
#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...


Título: Re: algoritmos de decker
Publicado por: n0z en 28 Septiembre 2012, 14:57 pm
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?





Título: Re: algoritmos de decker
Publicado por: include (); en 28 Septiembre 2012, 17:58 pm
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 (http://aprendiendo-software.blogspot.com/search/label/Algoritmo) pero no se como programarlos ya lo probe todo y nada  :-(

Mil gracias por tu ayuda


Título: Re: algoritmos de decker
Publicado por: n0z en 28 Septiembre 2012, 20:13 pm
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.


Título: Re: algoritmos de decker
Publicado por: include (); en 28 Septiembre 2012, 20:27 pm
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...