Coder Social home page Coder Social logo

productorconsumidor-scd-ugr's Introduction

Problema Productor-Consumidor

Alumno : Cristian Velez Ruiz

Asignatura : Sistemas Concurrentes y Distribuidos - UNIVERSIDAD DE GRANADA 2015

Curso : *

Grupo : *


Productor-Consumidor :

La estructura que utilizo para almacenar los datos producidos es una cola , en la que al tener un tamaño fijo he decidido crearla de forma estatica , con un valor de 10.

Esta ejecucion consta de dos thread , uno llamado produce que actua de productor y otro consume que actuara de consumidor:

pthread_create(&produce,NULL,&productor,NULL);
pthread_create(&consume,NULL,&consumidor,NULL);

Los semaforos que he utilizado son :

sem_t produc ;
sem_t consum ; 
sem_t escribePantalla;
    sem_t queueMutex ;

Y los he inicializado de la siguiente manera :

sem_init( &produc, 0, 10 ) y sem_init( &consum, 0, 0 ): El semaforo de produc esta a 10 ya que podra producir como mucho hasta 10 valores , 
este semaforo actua conjuntamente con el de consum , ya que cuando este decrece hasta 0 como mucho , el de consum aumentara hasta 10 diciendo que podria consumir 
como mucho hasta 10 valores , la suma de los valores de estos semaforos en toda la ejecucion valdra 10.

sem_init( &escribePantalla, 0, 1 ): Este semaforo  es para poder escribir en pantalla , cuando se vaya a utilizar un cout o cerr , este semaforo se pondra  a 0 hasta que 
no termine , y cuando termine se pondra a 1 , para que ningun otra salida de pantalla la interrumpa.

sem_init( &queueMutex, 0, 1 ): Muy parecido al escribe pantalla , pero en este caso es para evitar conflictos de meter y sacar datos de la Cola.

Fumadores :

En este programa no uso ninguna estructura de datos auxiliar para almacenar los datos , ya que cuando se produce por ejemplo papel , el mismo estanquero desbloquea al proceso que necesitase papel.

Los 4 thread que he utilizado en esta implementacion son :

pthread_t fumadores[3]: En este array almaceno a 3 fumadores , el 0 necesita papel , el 1 tabaco y el 2 mechero , estos los desbloqueara el estanquero dependiendo de 
			lo que ha producido.
pthread_t estanco: Sera el primero que se lance y hasta que un fumador no recoja lo que ha generado no volvera a crear otro material .

Los semaforos usados han sido :

sem_t semaforoEstanco: En cuanto genere un 1 elemento se para y hasta que no lo recojan , no volvera a producir , por tanto su inicializacion sera a 1.

sem_t productoPreparado[3]; De la misma manera dependiendo de lo que se haya producido el estanquero mandara una señal para que se "recoja" el producto y pueda fumar.

Y los he inicializado de la siguiente manera :

sem_init(&semaforoEstanco,0,1): Nada mas lanzarse sera lo primero que se ejecute para crear tabaco , papel o cerillas , ya que sin eso los demas fumadores no podran ejecutarse y 
				permanceran dormidos , a la espera de su producto.


for(int i= 0 ; i<3 ; i++ ) {

	sem_init(&productoPreparado[i],0,0): Hasta que el estanquero no llame a alguno de ellos a fumar estaran dormidos , cuando terminen de fumar , volvera a dormirse.
		

}

Contacto : www.cristianvelez.es

productorconsumidor-scd-ugr's People

Contributors

ainokila avatar

Stargazers

 avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.