elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  retomar bucle for con valores globales
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: retomar bucle for con valores globales  (Leído 1,481 veces)
d91

Desconectado Desconectado

Mensajes: 165


Ver Perfil
retomar bucle for con valores globales
« en: 2 Septiembre 2015, 16:56 pm »

Hola a todos, estoy intentando simular el algoritmo dekker 1 (alternancia estricta), llamo al proceso 1, y su seccion_critica inicia el bucle for empieza corriendo bien pero al retomar el bucle for despues de la  primera interrupcion ya no lo realiza, el for deberia llegar a 7000 porque  aumento el acumulador de los procesos
Código
  1. struct PCB{
  2. int id; //id del proceso
  3. char nombre[16];//nombre
  4. int tareas_iniciales; //duracion de las tareas iniciales
  5. int duracion; //cuanto durara el proceso
  6. int quantum; //contador de interrupciones
  7. int acumulador;//valor antes de la interrupcion
  8. };
  9.  
  10. PCB p1;
  11. PCB p2;
  12.  
  13. void crear_procesos(){        /***********************************/
  14. p1.id=1;                      //  RELLENA DATOS A LAS
  15. strcpy(p1.nombre,"PWRDVD");   //  ESTRUCTURAS
  16. p1.duracion=7000;             //  DE TIPO PCB
  17. p1.quantum=0;                 //
  18. p1.acumulador=0;              //                 //
  19. p1.tareas_iniciales=2000;     //  P1 ES PARA PROCESO1
  20.                              //
  21. p2.id=2;                      //
  22. strcpy(p2.nombre,"DVDRIPPER");//  P2 ES PARA PROCESO2
  23. p2.duracion=7000;             //
  24. p2.quantum=0;                 //
  25. p2.acumulador=0;              //                  //
  26. p2.tareas_iniciales=2000;     /*****************************/
  27. }
  28.  
  29. int seccion_critica(int id){
  30. cout<<"\nSeccion Critica: Proceso "<<id;
  31.   if(id==1){
  32.   for(int i=p1.acumulador; i<=p1.duracion; i=i+1000){
  33.   p1.acumulador=i;
  34.      if(i==3000||i==6000||i==9000){
  35.  
  36.         return 1;    /*** ENTRO AL BUCLE DEL QUANTUM ***/
  37.         Sleep(2000);
  38.         break;
  39.   }  //if
  40.   }//for
  41.   }//if principal
  42.   else{
  43.       for(int i=p2.acumulador; i<=p2.duracion; i=i+1000){
  44.            p2.acumulador=i;
  45.   if(i==3000||i==6000||i==9000){
  46.  
  47.         return 1;        /*** ENTRO AL BUCLE DEL QUANTUM***/
  48.         Sleep(2000);
  49.         break;
  50.   }  //if
  51.   }//for
  52.   }//else
  53.   Sleep(2000);
  54. }
  55.  
  56.  
la interrupcion se da a los 3000 lo cual si funciona, se interrumpe pero como es alternancia estricta regresa hacia la seccion_critica porque no ha terminado, en teoria la siguiente seria en 6000, pero despues de la primera interrupcion se vuelve a llamar a la sección critica del proceso 1 pero el ciclo for ya no hace nada solo se inicia en 3000 pero ya no sigue contando, aunque p1.duracion sigue siendo 7000, agradecere sus aportes


En línea

someRandomCode

Desconectado Desconectado

Mensajes: 250



Ver Perfil
Re: retomar bucle for con valores globales
« Respuesta #1 en: 2 Septiembre 2015, 17:23 pm »

Hmm, te hago una pregunta..
Lo estas haciendo con mutex y threads como el algoritmo de dekker implica verdad?
De ser asi, podrias postear el codigo entero para futuras referencias?


En línea

d91

Desconectado Desconectado

Mensajes: 165


Ver Perfil
Re: retomar bucle for con valores globales
« Respuesta #2 en: 2 Septiembre 2015, 18:18 pm »

es solo simulacion y no he utilizado threads, esto es  para comprender como se manejan las interrupciones y funcionamiento segun los algoritmos de dekker, al final encontre una solucion al problema
Código
  1. p1.acumulador=p1.acumulador+1000;
al principio asignaba lo que tenia i pero no se porque razon no corria bien
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema funciones, valores globales y demas
PHP
Azielito 3 2,151 Último mensaje 31 Julio 2007, 18:17 pm
por Sanjuu
Duda (Parar bucle con dato boolean) [bucle while]
Java
Dem0ny 5 18,291 Último mensaje 17 Diciembre 2008, 17:43 pm
por Dem0ny
Bucle incremental con secuencia de valores ajustados
Programación C/C++
VladisMSX1 3 2,450 Último mensaje 14 Mayo 2012, 17:41 pm
por VladisMSX1
Surgen páginas alternativas para retomar SeriesPepito y SeriesLy
Noticias
wolfbcn 0 1,551 Último mensaje 12 Diciembre 2014, 18:03 pm
por wolfbcn
Ayuda para retomar programación
Desarrollo Web
bgnumis 1 2,357 Último mensaje 27 Octubre 2016, 19:09 pm
por alanzo88
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines