SlideShare una empresa de Scribd logo
Theoretical
 A s s i g n m e n t   1
Unbounded-buffer producer-consumer with locks
Problem:
 #define N 100
 int cuenta = 0;
                                                         El problema que obtenemos aquí es
 void productor(void)
 {
                                                         que hay una condición de carrera.
          int elemento;

              while(TRUE){
              elemento = producir_elemento();
              if(cuenta == N)sleep();
              insertar_elemento(elemento);
              cuenta = cuenta + 1;
              if(cuenta == 1) wakeup(consumidor);
      }
 }

 void consumidor(void)
 {
           int elemento;

               while(TRUE) {
                     if(cuenta == 0)sleep();
                     elemento = quitar_elemento();
                     cuenta = cuenta - 1;
                     if(cuenta==N-1)wakeup(productor);
                     consumir_elemento(elemento);
          }
 }
Unbounded-buffer producer-consumer with locks

Solution:
                                                   Resolviendo este problema
  #define N 100
  typedef int semaforo;
  semaforo mutex = 1l
  semaforo vacias = N;
  semaforo llenas = 0;

  void productor(void)
                                                  mediante el uso de semáforos.
  {
           int elemento;

      while(TRUE){
           elemento = producir_elemento();
           down(&vacias);
          down(&mutex);
           insertar_elemento(elemento);
           up(&mutex);
           up(&llenas);
       }
  }

  void consumidor(void)
  {
            int elemento;

             while(TRUE) {
                 down(&llenas);
                 down(&mutex);
                 elemento = quitar_elemento();
                  up(&mutex);
                  up(&llenas);
                   consumir_elemento(elemento);
        }
  }
How to detect and eliminate deadlock in the
    dining philosophers problem.
   Problem:
Cinco filosofos estan sentados alrededor de una mesa
circular,cada filosofo tiene un plato de espagueti.El espagueti es
tan resbaloso, que un filosofo necesita dos tenedores para
comerlo.Entre cada par de platos hay un tenedor,cuando un
filosofo tiene hambre, trata de adquirir sus tenedores izquierdo y
derecho, uno a la vez, en cualquier orden.Si tiene exito al
adquirir dos tenedores, come por un momento,despues deja los
tenedores y continua pensando.
How to detect and eliminate deadlock in the
         dining philosophers problem.
   Solution:

#define N         5                void tomar_tenedores(int i)
#define IZQUIERDO      (i+N-1)%N   {
#define DERECHO        (i+1)%N                 down(&mutex);
#define PENSANDO        0                      estado[i] = HAMBRIENTO;
#define HAMBRIENTO 1                           probar(i);
#define COMIENDO         2                     up(&mutex);
typedef int semaforo;                         down(&s[i]);
int estado [N];                   }
semaforo mutex = 1;               void poner_tenedores(int i)
semaforo s[N];                    {
                                               down(&mutex);
void filosofo(int i)                            estado[i] = PENSANDO;
{                                              probar(IZQUIERDO);
     while(TRUE){                              probar(DERECHO);
           pensar();                           up(&mutex);
           tomar_tenedores(i);    }
           comer();               void probar(i)
           poner_tenedores(i);    {
     }                                                if(estado[i] == HAMBRIENTO && estado[IZQUIERDO] != COMIENDO &&
  }                               estado[DERECHO] != COMIENDO ){
                                  estado[i] = COMIENDO;
                                  up(&s[i]);
                                     }
                                  }

Más contenido relacionado

DOCX
Primer programa documentado de algebra
DOCX
3 desarollo manejo datos capitulo 3 -03 aplicaciones arreglo objetos
PDF
Elemento 4
PPTX
6-Unidad 1. Paradigma de la Programación-Orientación a Objetos
TXT
Ejercicios en netbeans con condiciones
PDF
Ejercicios resueltos de java
DOCX
Programacion ii
DOCX
Bucles compuestos ejercicios en código java
Primer programa documentado de algebra
3 desarollo manejo datos capitulo 3 -03 aplicaciones arreglo objetos
Elemento 4
6-Unidad 1. Paradigma de la Programación-Orientación a Objetos
Ejercicios en netbeans con condiciones
Ejercicios resueltos de java
Programacion ii
Bucles compuestos ejercicios en código java

La actualidad más candente (6)

PDF
Algoritmica i clase05 practica 5 solucionario
PDF
Ejercicios condicional-if
DOCX
Ejercidos resueltos en java para el portafolio
PDF
Funcione con vectores y matrices en c
PDF
Todas las estructuras
DOCX
Ejercicios en java
Algoritmica i clase05 practica 5 solucionario
Ejercicios condicional-if
Ejercidos resueltos en java para el portafolio
Funcione con vectores y matrices en c
Todas las estructuras
Ejercicios en java
Publicidad

Destacado (10)

PPT
Niveles de gestion
PPT
Nivel de gestión de las empresas
PPTX
Normalización de bases de datos
PPTX
Estrategias de aplicación de prueba de unidad ,integración, sistema, y de ace...
PPT
Tecnicas para busqueda de informacion
PDF
Trabajo potencia energía fisíca 2
PPT
Fases De Analisis
DOCX
Dinamica de fluidos
PDF
POTENCIAL ELECTRICO
PDF
Etapas de Desarrollo Software
Niveles de gestion
Nivel de gestión de las empresas
Normalización de bases de datos
Estrategias de aplicación de prueba de unidad ,integración, sistema, y de ace...
Tecnicas para busqueda de informacion
Trabajo potencia energía fisíca 2
Fases De Analisis
Dinamica de fluidos
POTENCIAL ELECTRICO
Etapas de Desarrollo Software
Publicidad

Más de Saul Gausin (6)

PDF
Proyectodevision
KEY
Presentación Proyecto Final
KEY
Proyecto Cómputo Integrado
KEY
Sistemas Adaptativos #3
PPT
Avance proyecto
KEY
Presentacion PDA
Proyectodevision
Presentación Proyecto Final
Proyecto Cómputo Integrado
Sistemas Adaptativos #3
Avance proyecto
Presentacion PDA

Último (20)

PPTX
modulo seguimiento 1 para iniciantes del
PPTX
Historia Inteligencia Artificial Ana Romero.pptx
PPTX
sa-cs-82-powerpoint-hardware-y-software_ver_4.pptx
DOCX
TRABAJO GRUPAL (5) (1).docxsjsjskskksksksks
PDF
Tips de Seguridad para evitar clonar sus claves del portal bancario.pdf
PDF
CyberOps Associate - Cisco Networking Academy
PDF
informe_fichas1y2_corregido.docx (2) (1).pdf
PDF
Diapositiva proyecto de vida, materia catedra
PDF
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
DOCX
TRABAJO GRUPAL (5) (1).docxjesjssjsjjskss
PPTX
Sesion 1 de microsoft power point - Clase 1
PDF
Documental Beyond the Code (Dossier Presentación - 2.0)
PDF
0007_PPT_DefinicionesDeDataMining_201_v1-0.pdf
PPTX
Propuesta BKP servidores con Acronis1.pptx
DOCX
Trabajo grupal.docxjsjsjsksjsjsskksjsjsjsj
DOCX
TRABAJO GRUPAL (5) (1).docxsjjsjsksksksksk
PDF
Influencia-del-uso-de-redes-sociales.pdf
DOCX
Zarate Quispe Alex aldayir aplicaciones de internet .docx
PPTX
Curso de generación de energía mediante sistemas solares
PDF
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
modulo seguimiento 1 para iniciantes del
Historia Inteligencia Artificial Ana Romero.pptx
sa-cs-82-powerpoint-hardware-y-software_ver_4.pptx
TRABAJO GRUPAL (5) (1).docxsjsjskskksksksks
Tips de Seguridad para evitar clonar sus claves del portal bancario.pdf
CyberOps Associate - Cisco Networking Academy
informe_fichas1y2_corregido.docx (2) (1).pdf
Diapositiva proyecto de vida, materia catedra
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
TRABAJO GRUPAL (5) (1).docxjesjssjsjjskss
Sesion 1 de microsoft power point - Clase 1
Documental Beyond the Code (Dossier Presentación - 2.0)
0007_PPT_DefinicionesDeDataMining_201_v1-0.pdf
Propuesta BKP servidores con Acronis1.pptx
Trabajo grupal.docxjsjsjsksjsjsskksjsjsjsj
TRABAJO GRUPAL (5) (1).docxsjjsjsksksksksk
Influencia-del-uso-de-redes-sociales.pdf
Zarate Quispe Alex aldayir aplicaciones de internet .docx
Curso de generación de energía mediante sistemas solares
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.

OS

  • 1. Theoretical A s s i g n m e n t 1
  • 2. Unbounded-buffer producer-consumer with locks Problem: #define N 100 int cuenta = 0; El problema que obtenemos aquí es void productor(void) { que hay una condición de carrera. int elemento; while(TRUE){ elemento = producir_elemento(); if(cuenta == N)sleep(); insertar_elemento(elemento); cuenta = cuenta + 1; if(cuenta == 1) wakeup(consumidor); } } void consumidor(void) { int elemento; while(TRUE) { if(cuenta == 0)sleep(); elemento = quitar_elemento(); cuenta = cuenta - 1; if(cuenta==N-1)wakeup(productor); consumir_elemento(elemento); } }
  • 3. Unbounded-buffer producer-consumer with locks Solution: Resolviendo este problema #define N 100 typedef int semaforo; semaforo mutex = 1l semaforo vacias = N; semaforo llenas = 0; void productor(void) mediante el uso de semáforos. { int elemento; while(TRUE){ elemento = producir_elemento(); down(&vacias); down(&mutex); insertar_elemento(elemento); up(&mutex); up(&llenas); } } void consumidor(void) { int elemento; while(TRUE) { down(&llenas); down(&mutex); elemento = quitar_elemento(); up(&mutex); up(&llenas); consumir_elemento(elemento); } }
  • 4. How to detect and eliminate deadlock in the dining philosophers problem. Problem: Cinco filosofos estan sentados alrededor de una mesa circular,cada filosofo tiene un plato de espagueti.El espagueti es tan resbaloso, que un filosofo necesita dos tenedores para comerlo.Entre cada par de platos hay un tenedor,cuando un filosofo tiene hambre, trata de adquirir sus tenedores izquierdo y derecho, uno a la vez, en cualquier orden.Si tiene exito al adquirir dos tenedores, come por un momento,despues deja los tenedores y continua pensando.
  • 5. How to detect and eliminate deadlock in the dining philosophers problem. Solution: #define N 5 void tomar_tenedores(int i) #define IZQUIERDO (i+N-1)%N { #define DERECHO (i+1)%N down(&mutex); #define PENSANDO 0 estado[i] = HAMBRIENTO; #define HAMBRIENTO 1 probar(i); #define COMIENDO 2 up(&mutex); typedef int semaforo; down(&s[i]); int estado [N]; } semaforo mutex = 1; void poner_tenedores(int i) semaforo s[N]; { down(&mutex); void filosofo(int i) estado[i] = PENSANDO; { probar(IZQUIERDO); while(TRUE){ probar(DERECHO); pensar(); up(&mutex); tomar_tenedores(i); } comer(); void probar(i) poner_tenedores(i); { } if(estado[i] == HAMBRIENTO && estado[IZQUIERDO] != COMIENDO && } estado[DERECHO] != COMIENDO ){ estado[i] = COMIENDO; up(&s[i]); } }

Notas del editor