Desarrollador Profesional de Juegos Programación III Unidad III Mutex, Semáforos y Condicion de Sincronización Bajo Linux.

Slides:



Advertisements
Presentaciones similares
GESTION DE PROCESOS.
Advertisements

I.T.E.S.R.C. Romina Tamez Andrea Martínez Ma. De Lourdes Solís
T5-multithreading SO-Grado Q1.
Unidad 5 Listas Enlazadas Bibliografía: Algoritmos y Estructuras de datos de Aguilar y Martinez. Unidad 9 Autor: Ing Rolando Simon Titiosky.
Daniel Morillo Jorge Boscán Gregory Carrasco
Unidad 6 Interbloqueos (Dead Lock)
Modelo de procesos de dos estados
Base de la biblioteca de threads a nivel usuario del proyecto SODIUM.
Detalles del sistema operativo
Comunicación y sincronización entre procesos
SISTEMAS OPERATIVOS UNIDAD 1..
IMPLEMENTACIÓN DEL ALGORITMO DE PRIORIDADES DUALES EN RT-LINUX
Subrutinas.
COLAS, IMPLEMENTACIÓN A PARTIR DE LISTAS Y PARA PILAS
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Tema 6: Clases Antonio J. Sierra.
HILOS Y COMUNICACIÓN ENTRE PROCESOS
Signal, kill, sigaction y máscara de señales
PONNHI PONNHI Una Nueva Arquitectura Microkernel Pthreads en Espacio de Usuario José Manuel Rodríguez García Juan A. Rico Gallego Jesús M. Álvarez Llorente.
Semana 5 Subprogramas..
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA OCHO THREADS.
Unidad 4 Interbloqueos (Dead Lock)
Concurrencia: Exclusión Mútua y Sincronización
C++ LISTAS C++ 11/04/2017 Ing. Edgar Ruiz Lizama.
Comunicación y sincronización entre procesos Realizado por Kepa Bengoetxea Kortazar
Semáforos Cecilia Hernández
Ing Florencia Ferrigno Tecnicas Digitales 3
Unidad III Administración de procesos
Desarrollador Profesional de Juegos Programación III Unidad II Una clase thread para window.
Sincronización de procesos Mariano Gómez Plaza.  Mariano Gómez Plaza Sincronización de procesos 2 Tipos de procesos IndependientesCooperantes.
IET110 Sistemas Operativos P04: Exclusión Mutua Prof. Jonathan MakucSlide: 1.
Sistemas en tiempo real (STR)
Material de apoyo Unidad 4 Estructura de datos
Date | Place Señales Práctica I. Name | Company Objetivos Captura de una señal y tratamiento de la misma Checkpointing.
 El acceso concurrente a datos compartidos puede dar pie a inconsistencia de datos  Mantener la consistencia de los datos requiere mecanismos para asegurar.
Programming with POSIX* Threads Intel Software College.
EXPRESIONES Y SENTENCIAS
Monitores Mecanismo sincronización de nivel más alto que semáforos Construcción a nivel de lenguaje de programación que controla el acceso a datos compartidos.
Sincronización de Procesos
Estructuras de Control.
Introducción a Procesos.  Contexto de ejecución: Conjunto de variables y parámetros, que tiene independencia de otro procesos.  Contexto de E/S ◦ Descriptores.
Desarrollador Profesional de Juegos Programación III Unidad III Mutex, Semáforos y Condicion de Sincronización Bajo Linux.
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) cec.uchile.cl Módulo ECI - 11: Fundamentos de Redes de Computadores.
Programación secuencial vs programación concurrente
INFORMATICA III ESCUELA DE INGENIERIA ELECTRONICA DEPARTAMENTO DE SISTEMAS E INFORMATICA.
Teoría de Sistemas Operativos Sincronización Procesos Departamento de Electrónica 2º Semestre, 2003 Gabriel Astudillo Muñoz
Listas Ligadas Simples. Definíción I  Es, en sencillas palabras. un grupo de datos organizados secuencialmente, pero a diferencia de los arreglos, la.
Materia: Técnicas Digitales 3
Programando con Hilos POSIX* Intel Software College.
Programación Orientada a Objetos
Desarrollador Profesional de Juegos Programación III Unidad III Programación con Threads Bajo Linux.
Teoría de Sistemas Operativos Sincronización Procesos
Por Luis Esteban Monsalve Martínez
INTRODUCCION A LA PROGRAMACION
LENGUAJE “C” Programación.
Threads en Java  Threads: programas multitarea  Creación de threads  Ciclo de vida de un thread  Sincronización.
Se pueden incluir comentarios en cualquier parte de un programa pero deben delimitarse con llaves o con paréntesis y asterisco:
Colisiones.. Introducción Algo que vemos mucho en bastantes videojuegos, y que por el momento no se ha visto “bien”, son las colisiones, pero, para empezar;
UTFSM - Sistemas Operativos
¿QUE ES EL DIAGRAMA DE ESTADO ?
Desarrollador Profesional de Juegos Programación III Unidad II Trabajando con bloqueo de datos.
 Las funciones son un conjunto de instrucciones que realizan una tarea específica. En general toman unos valores de entrada, llamados parámetros y proporcionan.
Desarrollador Profesional de Juegos Programación III Unidad II Introdución a threading en windows.
Desarrollador Profesional de Juegos Programación III Unidad II introducción a Mutex Secciones críticas.
Desarrollador Profesional de Juegos Programación III Unidad I Capturar Excepciones.
Desarrollador Profesional de Juegos Programación III Unidad I Excepciones Tipos.
Desarrollador Profesional de Juegos Programación III Unidad II Hilos de ejecución Threads.
2015-BM5A. Introducción Durante años, los programadores se han dedicado a construir aplicaciones muy parecidas que resolvían una y otra vez los mismos.
MUTEX. QUE ES CONCURRENCIA - MUTEX  Son el mecanismo que nos ayuda en la sincronización para proteger una sección crítica en nuestro código.  Estas.
COORDINACIÓN Y SINCRONIZACIÓN DE PROCESOS: 1.1. Concurrencia 1.2. Semáforos 1.3. Sección Critica 1.4. Bloqueos.
Transcripción de la presentación:

Desarrollador Profesional de Juegos Programación III Unidad III Mutex, Semáforos y Condicion de Sincronización Bajo Linux

Un caso práctico Consideremos dos variables compartidas x e y protegidas por el mutex mut y la condición cond que será señalizada cuando x sea mayor que y: int x,y; pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t cond = PTHREAD_COND_INITIALIZER; Los threads que esperan, incluirán el siguiente código: // Bloqueo de la sección crítica pthread_mutex_lock (&mut); // En realidad bastaría un if, pero si hay varios threads... while(x<=y) { // Esperamos la señal.. pthread_cond_wait(&cond,&mut); } /* Aquí trabajaríamos con '''x''' y con '''y''' */ // los otros threads pueden continuar... pthread_mutex_unlock(&mut);

El thread que señaliza la condición tendría el código siguiente: críticapthread_mutex_lock(&mut); // Bloqueo de la sección /* Aquí trabajaríamos con '''x''' y con '''y''' */ // Señalo la condición. Si únicamente tuviera 1 thread en espera bastaría // pthread_cond_signal if (x>y) pthread_cond_broadcast(&cond); pthread_mutex_unlock(&mut); // Libero el mutex //Si quisieramos que la espera tuviera un timeout de 5 segundos: struct timeval now; struct timespec timeout; int retcode; pthread_mutex_lock(&mut); gettimeofday(&now); timeout.tv_sec=now.tv_sec+5; timeout.tv_nsec=now.tv_usec*1000; retcode=0; while ((x<=y) && (retcode != ETIMEDOUT)) { retcode=pthread_cond_timedwait(&cond,&mut,&timeout); } if (retcode == ETIMEDOUT) { /*Error,se acabo el tiempo (pasaron los 5 segundos) */} else { /* Trabajar con las variables '''x''' e '''y''' */ } pthread_mutex_unlock(&mut);

Cancelación de Threads La cancelación es un mecanismo por el que un thread puede provocar la finalización de otro enviándole una petición de finalización. Dependendo de la forma de trabajar del otro thread, puede ignorar la petición, finalizar inmediatamente o esperar alcanzar un punto de cancelación. Si el thread atiende inmediatamente la petición termina devolviendo el código PTHREAD_CANCELED. Los puntos de cancelación son puntos de ejecución donde se comprueba si hay peticiónes de cancelación pendientes. Las siguientes funcións tienen puntos de cancelación: pthread_join, pthread_cond_wait, pthread_cond_timedwait pthread_testcancel, sem_wait, sigwait. Las funcions de cancelación de thread son las siguientes: int pthread_cancel(pthread_t thread); int pthread_setcancelstate(int state, int *oldstate); int pthread_setcanceltype(int type,int *oldtype); int pthread_testcancel(void);

pthread_cancel envía una petición de cancelación al thread indicado como argumento. pthread_setcancelstate cambia el estado de cancelación del thread, es decir indica cuando se ignorarán las señales de cancelación y cando no. El parámetro state puede ser PTHREAD_CANCEL_ENABLE para permitir la cancelación o PTHREAD_CANCEL_DISABLE para no permitirla. Si el parámetro oldstate no es NULL, devolverá el estado de cancelación previo. pthread_setcanceltype cambia el tipo de respusta a las peticións de cancelación, y puede ser PTHREAD_CANCEL_ASYNCHRONOUS (para cancelación inmediata) o PTHREAD_CANCEL_DEFERRED (esperar al siguiente punto de cancelación). Si el parámetro oldtype no es NULL almacenará el tipo de cancelación anterior. pthread_testcancel únicamente sitúa un punto de cancelación en el lugar en que se llame. Los threads se créan por defecto con la cancelación activa con el tipo PTHREAD_CANCEL_DEFERRED

Envío y Gestion de Señales int pthread_sigmask(int how, const sigset_t *newmask, sigset_t *oldmask); int pthread_kill(pthread_t thread, int signo); int sigwait(const sigset_t *set, int *sig); thread_sigmask cambia el conjunto de señales que va a respostar el thread. Si el parámetro oldmask no es NULL, almacenará el conjunto viejo de señales. Si how es SIG_SETMASK el conjunto de señales inicializa la newmask, si es SIG_BLOCK engádense las señales especificadas en newmask y si es SIG_UNBLOCK se quítan las señales especificadas en newmask del conjunto de señales los que va a respostar el thread. Los conjuntos de señales se manipulan con las funciónes:

int sigemptyset(sigset_t *conjunto); //vacía el conjunto de señales indicado int sigfillset(sigset_t *conjunto); //incluye todos los señales existentes en el conjunto indicado. int sigaddset(sigset_t *conjunto, int numseñal); //engaña a la señal indicada en el conjunto). int sigdelset(sigset_t *conjunto, int numseñal); // (elimina la señal indicad del conjunto). int sigismember(const sigset_t *conjunto, int numseñal); // (indica si el señal indicado pertence el conjunto). pthread_kill envía la señal signo al thread especificado. sigwait suspende el thread hasta que recibe una señal del conjunto indicado en set, almacenando entonces la señal recibida en sig. Se ignorará cualquier función asociada a la señal. Envío y Gestion de Señales