Code Monkey home page Code Monkey logo

philosophers's Introduction

philosophers - gmacias-

En este proyecto, aprenderás los principios básico de hilar un proceso.Vas a aprender a como crear hilos y descubrirás los mutex.

Indice


Que es philosophers?

Philosophers es un proyecto sobre programación, sincronización y rendimiento de subprocesos múltiples.

Para mejor entendimiento de su funcionamiento, haremos una analogia donde:

  • Cada filósofo debe ser un hilo.
  • Hay un tenedor entre cada filósofo. por lo tanto, si hay varios filósofos, cada filósofo debe tener un tenedor a su izquierda y a su derecha.
  • Si solo hay un filósofo, solo habrá un enedor en la mesa.
  • Para prevenir que los filósofos dupliquen los tenedores, deberás proteger los tenedores con un mutex por cada uno de ellos.

Las reglas del juego:

Aqui muestro cuales son las reglas del juego:

  1. El programa debe tomar los siguientes argumentos:

    • number_of_philosophers
    • time_to_die
    • time_to_eat
    • time_to_sleep
    ◦ number_of_times_each_philosopher_must_eat (opcional)

number_of_philosophers: es el número de filósofos, pero también el número de tenedores.
time_to_die (en ms): si un filósofo no empieza a comer, si la diferencia entre una comida y eotra es mayor a time_to_die, este morirá.
time_to_eat (en ms): es el tiempo que tarda un filósofo para comer. Durante ese tiempo, tendrá los tenedores ocupados.
time_to_sleep (en ms): es el tiempo que esta durmiendo un filósofo. Durante ese tiempo, no podra hacer nada.
(opcional): limita cuantas veces todos los filosofos deben de comer, si lo cumplen, la simulación se detendrá. Si no se especifica, la simulación se detendrá con la muerte de un filósofo.

  1. Cada filósofo tendrá asignado un número: del 1 al number_of_philosophers.
  2. La mesa es redonda. El filósofo número 1 se sentará al lado del filósofo número number_of_philosophers. Los demas se sentarán entre el filósofo número N - 1 y el filósofo número N + 1.

Que utilizamos?

En nuestro philosophers tenemos solo las siguentes funciones de librerias externas autorizadas:

Función Descripción
malloc Solicitar un bloque de memoria del tamaño suministrado como parámetro.
free Desasigna un bloque de memoria que se había asignado previamente mediante una llamada.
write Hace que los bytes que indiques del buffer sean escritos en el file descriptor seleccionado.
printf Escribe por pantalla una “cadena de formato” donde puedes incluir variables en la salida.
usleep Suspende la ejecución del proceso llamante durante usec microsegundos.
gettimeofday Permite obtener la hora usado en los sistemas operativos UNIX.
pthread_create Crea un nuevo hilo donde le puedes pasar la funcion a realizar junto los atributos necesarios
pthread_mutex_init Crea e inicializa un nuevo bloqueador
pthread_mutex_lock Bloquea el bloqueador
pthread_mutex_unlock Desloquea el bloqueador
pthread_mutex_destroy Elimina el bloqueador seleccionado
pthread_join Une cada hilo que pase por esta funcion con el hilo principal

Como funciona?

Para compilar el programa seguimos los siguientes pasos:

git clone https://github.com/gjmacias/philosophers
cd philosophers/philo
make

Luego ejecutamos el programa pasandole de parametros mencionados en la reglas del juego:

Aqui dejare dos ejemplos de funcionamiento:

./philo 2 600 200 200 2

stop_by_goal

./philo 3 500 200 200

stop_by_death

Una vez enviado, te mostrará por pantalla:

  • En que momento se ejecuta la accion
  • que filosofo es el responsale
  • que accion ha sucedido

¡Eso sería todo!


Quizás pueda interesarte!

- Para ver mi progresion en 42 🌠

AQUÍ

- Mi perfil de 42 👾

AQUÍ

- Mis proyectos personales 🧐

AQUÍ🗒️

Contacto 📥

◦ Email: [email protected]

philosophers's People

Contributors

gjmacias avatar

Watchers

 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.