SlideShare una empresa de Scribd logo
1 de 37
Ingeniería en Sistemas Computacionales
Tópicos Avanzados de Programación
Unidad IV: Programación Concurrente (Multi-hilos)
Este material está desarrollado para la asignatura Tópicos Avanzados de Programación, de la carrera de Ingeniería en
Sistemas Computacionales, plan de estudios ISIC-2010-224
TÓPICOS AVANZADOS DE PROGRAMACIÓN
TÓPICOS AVANZADOS DE PROGRAMACIÓN
Competencia: Resolver problemas utilizando programación
concurrente.
Concepto de hilo.
• Un hilo es un proceso que se está ejecutando en un momento
determinado en nuestro sistema operativo, como cualquier otra tarea,
esto se realiza directamente en el procesador.
• Existen los llamados “demonios” que son los procesos que define el
sistema operativo en sí para poder funcionar y otros que llamaremos
los hilos definidos por el usuario o por el programador, estos últimos
son procesos a los que el programador define un comportamiento e
inicia en un momento específico.
TÓPICOS AVANZADOS DE PROGRAMACIÓN
• En .NET, cuando se lanza una aplicación se crea un proceso y dentro de este
proceso un hilo de ejecución o thread para el método main().
• Es posible, a la vez que se ejecuta el método main(), que la aplicación lance
internamente nuevos hilos de ejecución en los que se ejecute el código de
algún método.
TÓPICOS AVANZADOS DE PROGRAMACIÓN
• Un ejemplo muy actual de utilización de threads es una aplicación de tipo
servidor Web, como el IIS, Apache Web Server, etc.
• Un servidor Web es una aplicación que, al ser lanzada y creado para ella un
proceso y un hilo para el método main(), espera a que llegue una petición
http de un cliente al puerto que escucha (el 80 generalmente) y cuando
llega hace dos cosas:
• Crea un nuevo hilo de ejecución o thread en el que atiende la petición.
• Vuelve inmediatamente (en el hilo principal) a escuchar el puerto para
atender nuevas peticiones (mientras se atiende la petición en el nuevo
hilo).
TÓPICOS AVANZADOS DE PROGRAMACIÓN
• En equipos con menos procesadores que hilos o threads lanzados en un
momento dado, se habla de concurrencia aparente, ya que todos los hilos
no pueden estar ejecutándose a la vez.
• No obstante, no se ha de pensar que tener un solo procesador hace inútil
lanzar más de un hilo o thread simultáneamente. Ni mucho menos, el 100%
del tiempo de ejecución de un hilo no está ocupado el procesador
(interacción con el usuario, entrada/salida, acceso a memoria), de modo que
otro hilo puede aprovechar sus tiempos muertos.
TÓPICOS AVANZADOS DE PROGRAMACIÓN
• También es cierto que un exceso de threads o hilos resulta negativo, ya que
se puede perder más tiempo “saltando” de un thread a otro que en la
ejecución real (a esta operación se la llama “conmutación de contexto” e
implica salvar y recuperar datos y registros de memoria).
TÓPICOS AVANZADOS DE PROGRAMACIÓN
• En Windows, aunque sólo se disponga de un procesador, se permite
ejecutar varios hilos simultáneamente (concurrencia aparente). Lo que se
hace es ofrecer un tiempo determinado de ejecución (time slice o “rodaja
de tiempo”) a cada hilo (realmente son milisegundos). Cuando ese tiempo
finaliza, Windows retoma el control y se lo cede a otro thread.
• De este modo se ofrece al usuario la ilusión de tener varias aplicaciones en
ejecución simultáneamente y también se optimiza el uso de los recursos. A
este modo de organizar la ejecución de varios threads se le llama
preemptive multitasking (“multitarea preemptiva”).
• En realidad, el sistema operativo y cualquier hilo que se lance ya son dos
hilos, con lo cual la ejecución en Windows es siempre multihilo.
TÓPICOS AVANZADOS DE PROGRAMACIÓN
La clase Thread.
• Esta clase pertenece al namespace System.Threading. Para crear un thread
sólo hay que crear una instancia de esta clase. Sus métodos más importantes
son:
•start: lanza el thread a ejecución.
•suspend: detiene momentáneamente la ejecución del thread.
•resume: activa el thread suspendido, es decir, lo vuelve a poner en
ejecución.
•abort: aborta o para de modo inmediato la ejecución del thread.
•join: detiene el thread donde se invoca hasta que el thread para el que se
le invoca termina.
TÓPICOS AVANZADOS DE PROGRAMACIÓN
Las propiedades más interesantes de la clase Thread son:
• Name: permite darle un nombre a un thread que lo distinga del
resto.
• CurrentThread: contiene una referencia al thread que está
actualmente en ejecución.
TÓPICOS AVANZADOS DE PROGRAMACIÓN
Ejecución de un thread
• Un thread no es más que un bloque de código vacío por defecto que es
posible lanzar a ejecución de modo simultáneo a otros threads.
• Supóngase que se desea crear una aplicación desde la que se lance un
thread que referencie una función que muestre 10 veces un mensaje (“Hola,
soy el thread”) en la consola. La aplicación lanzará también la función desde
el thread principal de la aplicación (main).
• El código necesario para crearlo es el siguiente:
TÓPICOS AVANZADOS DE PROGRAMACIÓN
TÓPICOS AVANZADOS DE PROGRAMACIÓN
Detener y activación de un Thread
• Una vez un thread ha sido lanzado puede ser suspendido (suspend),
reactivado (resume) o abortado (abort).
• suspend y resume: suspend suspende la ejecución de un thread
momentáneamente.
• Un thread suspendido puede ser reactivado llamando a resume. Si no se
utilizan bien pueden causar situaciones de bloqueo no recuperables.
• abort: lanza una excepción ThreadAbortException en el thread. El
tratamiento por defecto para esta excepción es finalizar la ejecución del
thread. No obstante si se captura la excepción, se puede programar el
tratamiento que se desee.
TÓPICOS AVANZADOS DE PROGRAMACIÓN
Propiedades Name y CurrentThread
• Con la propiedad Name puede darse nombre a ambos threads; y
• La propiedad CurrentThread puede obtenerse el thread principal
para darle nombre.
Propiedad Join
• El método Join pertenece a la clase Thread y lo que hace es detener
la ejecución del thread donde se invoca hasta que el thread para el
que se invoca termina.
TÓPICOS AVANZADOS DE PROGRAMACIÓN
Por ejemplo:
TÓPICOS AVANZADOS DE PROGRAMACIÓN
TÓPICOSAVANZADOSDE
PROGRAMACIÓN
TÓPICOSAVANZADOSDE
PROGRAMACIÓN
Consideraciones
Application.Run(): Esta instrucción ejecuta una forma como aplicación, es
la apropiada para abrir un nuevo hilo.
Application.Exit(): Cierra la aplicación actual. Se debe tener cuidado al
utilizarla ya que si hay hilos que fueron ejecutados por
esta aplicación se cerrarán también. Lo mejor es usarla
solo en el formulario principal.
this.close(): Esta instrucción es la más apropiada para cerrar una
forma que fue abierta como hilo ya que solo cierra el
formulario o hilo actual pero no cierra la aplicación.
TÓPICOS AVANZADOS DE PROGRAMACIÓN
Ejercicio: Abecedario con Hilos
Realice un programa utilizando hilos que haga lo siguiente:
• Debe lanzar 10 hilos que desplieguen el abecedario inglés en minúsculas
(códigos ascii del 65 al 90)
• Cada hilo debe tener un nombre que haga referencia al número de hilo
actual y se debe desplegar cuando se lanza por primera vez, y también junto
a cada letra del abecedario.
TÓPICOS AVANZADOS DE PROGRAMACIÓN
TÓPICOSAVANZADOSDE
PROGRAMACIÓN
TÓPICOSAVANZADOSDE
PROGRAMACIÓN
Prioridades
• Cuando se lanzan varios threads para que se ejecuten simultáneamente, se
les asignan las “rodajas de tiempo” en función del valor que tenga su
propiedad Priority.
• La propiedad Priority es una propiedad pública de la clase Thread (no es
static). Realmente es una enumeración del tipo ThreadPriority, cuyos
posibles valores son:
TÓPICOS AVANZADOS DE PROGRAMACIÓN
Sincronización:
• La sincronización de threads consiste en asegurar que distintos threads
acceden de modo coordinado a recursos compartidos.
• El caso más sencillo es la sincronización del uso del procesador, lo cual se
lleva a cabo por el sistema operativo mediante la “multitarea preemptiva”
(“rodajas de tiempo”).
• Pero existen otras situaciones en las que la sincronización es necesaria y no
la hace por defecto el sistema operativo.
TÓPICOS AVANZADOS DE PROGRAMACIÓN
lock
• La sentencia lock bloquea el acceso a un bloque de código,
asegurando que sólo el thread que lo ha bloqueado tiene acceso a tal
bloque.
Supóngase la siguiente clase:
TÓPICOS AVANZADOS DE PROGRAMACIÓN
TÓPICOS AVANZADOS DE PROGRAMACIÓN
TÓPICOS AVANZADOS DE PROGRAMACIÓN
Clase System.Threading.Monitor
• La clase Monitor implementa el concepto de monitor de
sincronización. Del mismo modo que existe esta clase existen otras
como Mutex, etc.
• la sentencia lock equivale a utilizar un Monitor llamando a sus
métodos Enter (al comienzo del bloque) y Exit (al final del bloque).
TÓPICOS AVANZADOS DE PROGRAMACIÓN
Los métodos más importantes de la clase monitor son:
• Enter: bloquea el segmento de código al que precede.
• TryEnter: es similar a Enter pero no bloquea o produce sólo un bloqueo
temporal.
• Exit: libera el bloque.
• Wait: Detiene al thread que lo llama (muy importante, no bloquea el código
a otros threads sino que detiene al thread llamador) dejándolo en espera de
que otro thread le notifique que puede seguir mediante el método Pulse.
También libera el bloqueo que haya hecho ese thread si es que lo hay.
• Pulse: notifica a un thread en la cola de espera (Wait) que puede continuar.
• PulseAll: realiza la notificación a todos los threads de la cola de espera.
TÓPICOS AVANZADOS DE PROGRAMACIÓN
A continuación, como ejemplo, se sustituye en el ejercicio anterior lock por las
correpondientes llamadas a Enter y Exit en la clase Monitor.
int Realizar_Transaccion(int cantidad) {
//comentar este método para ver el problema de no usarlo
Monitor.Enter(this);
{
if (saldo >= cantidad) {
Thread.Sleep(5);
saldo = saldo - cantidad;
System.Console.Write
(Thread.CurrentThread.Name.ToString());
System.Console.WriteLine ("-- Saldo= " +saldo.ToString());
Monitor.Exit(this);
return saldo;
} else
TÓPICOS AVANZADOS DE PROGRAMACIÓN
{ // continuacion del Else
//si el balance es menor que la cantidad que se desea retirar
//se deniega la transacción
System.Console.Write
(Thread.CurrentThread.Name.ToString());
System.Console.Write ("-- Transacción denegada.");
System.Console.WriteLine ("-- El saldo sería= " +(saldo - cantidad));
Monitor.Exit(this);
return 0;
}
}
}
Nota: Se puede observar que las llamadas a Exit han de ser antes de return o no se
ejecutarán.
TÓPICOS AVANZADOS DE PROGRAMACIÓN
• Clase Mutex (Mutual Exclusion); Su funcionalidad es asegurar que
solamente un hilo pueda tener a acceso a un recurso, o porción de
código, esta clase puede ser usada para evitar que múltiples instancias de
una aplicación sean iniciadas.
• Aparentemente la funcionalidad de la clase Mutex es muy parecida a
Lock, una de las grandes diferencias entre ellas es que Mutex es una clase
y Lock es una Instrucción, la funcionalidad de Mutex es mayor ya que
permite manejar bloqueo a nivel de Sistema Operativo, de tal forma que
actúa a nivel de proceso.
• Cuando un Hilo adquiere una exclusión mutua (mutex), el siguiente Hilo
que intenta adquirir dicha exclusión mutua se suspende hasta que el
primer subproceso libera la exclusión mutua.
TÓPICOS AVANZADOS DE PROGRAMACIÓN
• Existen dos tipo de exclusiones mutuas: exclusiones mutuas locales y
exclusiones mutuas del sistema con nombre.
• Si crea un objeto Mutex con un constructor que acepta un nombre, se
asocia a un objeto del sistema operativo con dicho nombre. Las
exclusiones mutuas del sistema con nombre son visibles en todo el
sistema operativo y se pueden utilizar para sincronizar las actividades de
los procesos.
• Con respecto al desempeño de la utilización de Mutex Vs Lock, La
instrucción Lock es mucho mas rápida que la utilización de la clase Mutex.
TÓPICOS AVANZADOS DE PROGRAMACIÓN
• Para utilizar la clase Mutex , se requiere el método WaitOne el cual
obtiene el bloqueo exclusivo de un contenido a bloquear. Dicho
bloque es liberado con el método ReleaseMutex. De la misma forma
que se bloqueo con Lock , la clase Mutex puede ser liberada
únicamente con la terminación del hilo que la llamo.
private static Mutex mut = new Mutex();
TÓPICOS AVANZADOS DE PROGRAMACIÓN
• Ejemplo
private static Mutex mut = new Mutex();
public void Sumar() {
mut.WaitOne();
Console.WriteLine("{0} Ingresando de Codigo Protegido",
Thread.CurrentThread.Name);
resultado = operador1 + operador2;
//Bloqueamos el Hilo actual durante un segundo
Thread.Sleep(1000);
Console.WriteLine("El resultado de la Suma es:" + resultado);
Console.WriteLine("{0} Saliendo de Codigo
Protegidon",Thread.CurrentThread.Name);
mut.ReleaseMutex();
}
TÓPICOS AVANZADOS DE PROGRAMACIÓN
Problema de los filósofos comensales:
• Hay cinco filósofos sentados alrededor de una mesa que pasan su
vida cenando y pensando. Cada uno dispone de un plato de arroz y
un palillo a la izquierda de su plato, pero para comer son necesarios
dos palillos y cada filósofo sólo puede sujetar el que está a su
izquierda o el que hay a su derecha. Con un solo palillo en la mano no
tienen más remedio que esperar hasta que atrapen otro y puedan
seguir comiendo.
• Si dos filósofos adyacentes intentan tomar el mismo palillo a la vez se
produce una condición de carrera: ambos compiten por lo mismo
pero uno se queda sin comer.
TÓPICOS AVANZADOS DE PROGRAMACIÓN
• Si todos los filósofos cogen el palillo de su derecha al mismo tiempo,
todos se quedarán esperando eternamente porque alguien debe
liberar el palillo que les falta, cosa que nadie hará porque todos se
encuentran en la misma situación (esperando que alguno deje su
palillo). Llegado esto, los filósofos se morirán de hambre. A este
bloqueo mutuo se le denomina interbloqueo o deadlock.
TÓPICOS AVANZADOS DE PROGRAMACIÓN
El objetivo consiste en encontrar un recurso que permita que los filósofos
nunca se mueran de hambre. Porque:
• Dos filósofos contiguos no pueden comer a la vez (exclusión mutua).
• Si un filósofo está comiendo, los contiguos no pueden hacerlo hasta
que él termine (sincronización).
• El filósofo que termina de comer debe ceder los palillos para su
posterior utilización (interbloqueo).
TÓPICOS AVANZADOS DE PROGRAMACIÓN

Más contenido relacionado

La actualidad más candente

Analizador Sintáctico
Analizador SintácticoAnalizador Sintáctico
Analizador SintácticoPablo Guerra
 
Unidad 3 topicos avanzados de programacion
Unidad 3 topicos avanzados de programacionUnidad 3 topicos avanzados de programacion
Unidad 3 topicos avanzados de programacionIrving Che
 
Algoritmos de distribucion de datos
Algoritmos de distribucion de datos Algoritmos de distribucion de datos
Algoritmos de distribucion de datos Armando Rosales
 
TAREAS DE LA ING. DE REQUISITOS
TAREAS DE LA ING. DE REQUISITOSTAREAS DE LA ING. DE REQUISITOS
TAREAS DE LA ING. DE REQUISITOSxinithazangels
 
Unidad Aritmética Lógica
Unidad Aritmética LógicaUnidad Aritmética Lógica
Unidad Aritmética LógicaGrmandma
 
Analisis Y DiseñO Orientado A Objetos
Analisis Y DiseñO Orientado A ObjetosAnalisis Y DiseñO Orientado A Objetos
Analisis Y DiseñO Orientado A Objetosyoiner santiago
 
maquinas de turing
maquinas de turingmaquinas de turing
maquinas de turingAnel Sosa
 
Algoritmo de planificación srt
Algoritmo de planificación srtAlgoritmo de planificación srt
Algoritmo de planificación srtCarlos Solano
 
Unidad 2 ensamblador
Unidad 2   ensambladorUnidad 2   ensamblador
Unidad 2 ensambladoreveTalavera
 
Procesos Interrupciones y Nucleo
 Procesos Interrupciones y Nucleo Procesos Interrupciones y Nucleo
Procesos Interrupciones y NucleoG Hoyos A
 
Algoritmos DEKKER y PETERSON
Algoritmos DEKKER y PETERSONAlgoritmos DEKKER y PETERSON
Algoritmos DEKKER y PETERSONPANAFMX
 
Administración de procesos en el S.O.
Administración de procesos en el S.O.Administración de procesos en el S.O.
Administración de procesos en el S.O.Carlos Solano
 
Cuadro Comparativo
Cuadro ComparativoCuadro Comparativo
Cuadro ComparativoMartha
 
Máquinas de Turing - Tipos y Aplicaciones
Máquinas de Turing - Tipos y AplicacionesMáquinas de Turing - Tipos y Aplicaciones
Máquinas de Turing - Tipos y AplicacionesRosviannis Barreiro
 
100 ejercicios-resueltos-de-sistemas-operativos
100 ejercicios-resueltos-de-sistemas-operativos100 ejercicios-resueltos-de-sistemas-operativos
100 ejercicios-resueltos-de-sistemas-operativosPatriciaDavila16
 
ESPRESIONES REGULARES
ESPRESIONES REGULARESESPRESIONES REGULARES
ESPRESIONES REGULARESAnel Sosa
 

La actualidad más candente (20)

Analizador Sintáctico
Analizador SintácticoAnalizador Sintáctico
Analizador Sintáctico
 
Unidad 3 topicos avanzados de programacion
Unidad 3 topicos avanzados de programacionUnidad 3 topicos avanzados de programacion
Unidad 3 topicos avanzados de programacion
 
Analizador Léxico en C++
Analizador Léxico en C++Analizador Léxico en C++
Analizador Léxico en C++
 
Algoritmos de distribucion de datos
Algoritmos de distribucion de datos Algoritmos de distribucion de datos
Algoritmos de distribucion de datos
 
TAREAS DE LA ING. DE REQUISITOS
TAREAS DE LA ING. DE REQUISITOSTAREAS DE LA ING. DE REQUISITOS
TAREAS DE LA ING. DE REQUISITOS
 
Unidad Aritmética Lógica
Unidad Aritmética LógicaUnidad Aritmética Lógica
Unidad Aritmética Lógica
 
Estándares para el Modelado de Procesos de Negocios
Estándares para el Modelado de Procesos de NegociosEstándares para el Modelado de Procesos de Negocios
Estándares para el Modelado de Procesos de Negocios
 
Analisis Y DiseñO Orientado A Objetos
Analisis Y DiseñO Orientado A ObjetosAnalisis Y DiseñO Orientado A Objetos
Analisis Y DiseñO Orientado A Objetos
 
Lenguaje ensamblador
Lenguaje ensambladorLenguaje ensamblador
Lenguaje ensamblador
 
maquinas de turing
maquinas de turingmaquinas de turing
maquinas de turing
 
Algoritmo de planificación srt
Algoritmo de planificación srtAlgoritmo de planificación srt
Algoritmo de planificación srt
 
Unidad 2 ensamblador
Unidad 2   ensambladorUnidad 2   ensamblador
Unidad 2 ensamblador
 
UNIDAD 3 MODULARIZACIÓN
UNIDAD 3 MODULARIZACIÓNUNIDAD 3 MODULARIZACIÓN
UNIDAD 3 MODULARIZACIÓN
 
Procesos Interrupciones y Nucleo
 Procesos Interrupciones y Nucleo Procesos Interrupciones y Nucleo
Procesos Interrupciones y Nucleo
 
Algoritmos DEKKER y PETERSON
Algoritmos DEKKER y PETERSONAlgoritmos DEKKER y PETERSON
Algoritmos DEKKER y PETERSON
 
Administración de procesos en el S.O.
Administración de procesos en el S.O.Administración de procesos en el S.O.
Administración de procesos en el S.O.
 
Cuadro Comparativo
Cuadro ComparativoCuadro Comparativo
Cuadro Comparativo
 
Máquinas de Turing - Tipos y Aplicaciones
Máquinas de Turing - Tipos y AplicacionesMáquinas de Turing - Tipos y Aplicaciones
Máquinas de Turing - Tipos y Aplicaciones
 
100 ejercicios-resueltos-de-sistemas-operativos
100 ejercicios-resueltos-de-sistemas-operativos100 ejercicios-resueltos-de-sistemas-operativos
100 ejercicios-resueltos-de-sistemas-operativos
 
ESPRESIONES REGULARES
ESPRESIONES REGULARESESPRESIONES REGULARES
ESPRESIONES REGULARES
 

Similar a Topicos Avanzados de Programacion - Unidad 4 programacion concurrente

Similar a Topicos Avanzados de Programacion - Unidad 4 programacion concurrente (20)

DIAPOSITIVAS UNIDAD3.pdf
DIAPOSITIVAS UNIDAD3.pdfDIAPOSITIVAS UNIDAD3.pdf
DIAPOSITIVAS UNIDAD3.pdf
 
Lps 17 hilos
Lps 17 hilosLps 17 hilos
Lps 17 hilos
 
hilosJava.pptx
hilosJava.pptxhilosJava.pptx
hilosJava.pptx
 
Uso de threads en C#
Uso de threads en C#Uso de threads en C#
Uso de threads en C#
 
Chap 15apin
Chap 15apinChap 15apin
Chap 15apin
 
Hilos En Java
Hilos En JavaHilos En Java
Hilos En Java
 
Threads
ThreadsThreads
Threads
 
Thread
ThreadThread
Thread
 
Chap 15fpin
Chap 15fpinChap 15fpin
Chap 15fpin
 
Tema 12 hilos en java por gio
Tema 12   hilos en java por gioTema 12   hilos en java por gio
Tema 12 hilos en java por gio
 
Programación multihebra en java
Programación multihebra en javaProgramación multihebra en java
Programación multihebra en java
 
Thread
ThreadThread
Thread
 
Programación multitarea
Programación multitareaProgramación multitarea
Programación multitarea
 
Clase 3 ene 8
Clase 3 ene 8Clase 3 ene 8
Clase 3 ene 8
 
Thread 01
Thread 01Thread 01
Thread 01
 
Uso de hilos
Uso de hilosUso de hilos
Uso de hilos
 
2o departamental Programacion 3
2o departamental Programacion 32o departamental Programacion 3
2o departamental Programacion 3
 
Java Threads (Hilos en Java)
Java Threads (Hilos en Java)Java Threads (Hilos en Java)
Java Threads (Hilos en Java)
 
Hilos
HilosHilos
Hilos
 
Programación III (Java) - 08 threads
Programación III (Java) - 08 threadsProgramación III (Java) - 08 threads
Programación III (Java) - 08 threads
 

Más de José Antonio Sandoval Acosta

Ing. Mecatronica Prog. Básica U4 Arreglos y estructuras
Ing. Mecatronica Prog. Básica U4 Arreglos y estructurasIng. Mecatronica Prog. Básica U4 Arreglos y estructuras
Ing. Mecatronica Prog. Básica U4 Arreglos y estructurasJosé Antonio Sandoval Acosta
 
Ing. Mecatrónica, Prog. Básica U3 control de flujo
Ing. Mecatrónica, Prog. Básica U3 control de flujoIng. Mecatrónica, Prog. Básica U3 control de flujo
Ing. Mecatrónica, Prog. Básica U3 control de flujoJosé Antonio Sandoval Acosta
 
Ing. Mecatrónica, Prog. Básica, U2 intro a la programacion
Ing. Mecatrónica, Prog. Básica, U2 intro a la programacionIng. Mecatrónica, Prog. Básica, U2 intro a la programacion
Ing. Mecatrónica, Prog. Básica, U2 intro a la programacionJosé Antonio Sandoval Acosta
 
Ing. Mecatrónica, Prog. Básica U1; Conceptos basicos y algoritmos
Ing. Mecatrónica, Prog. Básica U1; Conceptos basicos y algoritmosIng. Mecatrónica, Prog. Básica U1; Conceptos basicos y algoritmos
Ing. Mecatrónica, Prog. Básica U1; Conceptos basicos y algoritmosJosé Antonio Sandoval Acosta
 

Más de José Antonio Sandoval Acosta (20)

Linea del tiempo de la inteligencia artificial.pptx
Linea del tiempo de la inteligencia artificial.pptxLinea del tiempo de la inteligencia artificial.pptx
Linea del tiempo de la inteligencia artificial.pptx
 
UNIDAD 2 CLASIFICACION DE LOS MATERIALES.pptx
UNIDAD 2 CLASIFICACION DE LOS  MATERIALES.pptxUNIDAD 2 CLASIFICACION DE LOS  MATERIALES.pptx
UNIDAD 2 CLASIFICACION DE LOS MATERIALES.pptx
 
croquis de aulas UAIM topolobampo FEB 2024
croquis de aulas UAIM topolobampo  FEB 2024croquis de aulas UAIM topolobampo  FEB 2024
croquis de aulas UAIM topolobampo FEB 2024
 
Ing. Mecatronica Prog. Básica, U5 Módulos
Ing. Mecatronica Prog. Básica, U5 MódulosIng. Mecatronica Prog. Básica, U5 Módulos
Ing. Mecatronica Prog. Básica, U5 Módulos
 
Ing. Mecatronica Prog. Básica U4 Arreglos y estructuras
Ing. Mecatronica Prog. Básica U4 Arreglos y estructurasIng. Mecatronica Prog. Básica U4 Arreglos y estructuras
Ing. Mecatronica Prog. Básica U4 Arreglos y estructuras
 
Ing. Mecatrónica, Prog. Básica U3 control de flujo
Ing. Mecatrónica, Prog. Básica U3 control de flujoIng. Mecatrónica, Prog. Básica U3 control de flujo
Ing. Mecatrónica, Prog. Básica U3 control de flujo
 
Ing. Mecatrónica, Prog. Básica, U2 intro a la programacion
Ing. Mecatrónica, Prog. Básica, U2 intro a la programacionIng. Mecatrónica, Prog. Básica, U2 intro a la programacion
Ing. Mecatrónica, Prog. Básica, U2 intro a la programacion
 
Ing. Mecatrónica, Prog. Básica U1; Conceptos basicos y algoritmos
Ing. Mecatrónica, Prog. Básica U1; Conceptos basicos y algoritmosIng. Mecatrónica, Prog. Básica U1; Conceptos basicos y algoritmos
Ing. Mecatrónica, Prog. Básica U1; Conceptos basicos y algoritmos
 
Manual de prácticas y antología para POO
Manual de prácticas y antología para  POOManual de prácticas y antología para  POO
Manual de prácticas y antología para POO
 
Aplicaciones móviles intro.
Aplicaciones móviles intro.Aplicaciones móviles intro.
Aplicaciones móviles intro.
 
Economia
EconomiaEconomia
Economia
 
ISCA-quimica-Equipo 2.pptx
ISCA-quimica-Equipo 2.pptxISCA-quimica-Equipo 2.pptx
ISCA-quimica-Equipo 2.pptx
 
Plantilla presentación.pptx
Plantilla presentación.pptxPlantilla presentación.pptx
Plantilla presentación.pptx
 
kitchenham.pptx
kitchenham.pptxkitchenham.pptx
kitchenham.pptx
 
Diagrama de Casos de Uso UML
Diagrama de Casos de Uso UMLDiagrama de Casos de Uso UML
Diagrama de Casos de Uso UML
 
Introducción al Diagrama de Clases UML
Introducción al Diagrama de Clases UMLIntroducción al Diagrama de Clases UML
Introducción al Diagrama de Clases UML
 
Diagrama de clases UML
Diagrama de clases UMLDiagrama de clases UML
Diagrama de clases UML
 
Diagrama UML Casos de Uso
Diagrama UML Casos de UsoDiagrama UML Casos de Uso
Diagrama UML Casos de Uso
 
Tema 3 - Comandos básicos.pdf
Tema 3 - Comandos básicos.pdfTema 3 - Comandos básicos.pdf
Tema 3 - Comandos básicos.pdf
 
Tema 1 - Intro.pdf
Tema 1 - Intro.pdfTema 1 - Intro.pdf
Tema 1 - Intro.pdf
 

Último

IPERC Y ATS - SEGURIDAD INDUSTRIAL PARA TODA EMPRESA
IPERC Y ATS - SEGURIDAD INDUSTRIAL PARA TODA EMPRESAIPERC Y ATS - SEGURIDAD INDUSTRIAL PARA TODA EMPRESA
IPERC Y ATS - SEGURIDAD INDUSTRIAL PARA TODA EMPRESAJAMESDIAZ55
 
Residente de obra y sus funciones que realiza .pdf
Residente de obra y sus funciones que realiza  .pdfResidente de obra y sus funciones que realiza  .pdf
Residente de obra y sus funciones que realiza .pdfevin1703e
 
Presentación electricidad y magnetismo.pptx
Presentación electricidad y magnetismo.pptxPresentación electricidad y magnetismo.pptx
Presentación electricidad y magnetismo.pptxYajairaMartinez30
 
Clase 2 Revoluciones Industriales y .pptx
Clase 2 Revoluciones Industriales y .pptxClase 2 Revoluciones Industriales y .pptx
Clase 2 Revoluciones Industriales y .pptxChristopherOlave2
 
hitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docxhitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docxMarcelaArancibiaRojo
 
Manual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdfManual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdfedsonzav8
 
presentacion medidas de seguridad riesgo eléctrico
presentacion medidas de seguridad riesgo eléctricopresentacion medidas de seguridad riesgo eléctrico
presentacion medidas de seguridad riesgo eléctricoalexcala5
 
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)ssuser563c56
 
Una estrategia de seguridad en la nube alineada al NIST
Una estrategia de seguridad en la nube alineada al NISTUna estrategia de seguridad en la nube alineada al NIST
Una estrategia de seguridad en la nube alineada al NISTFundación YOD YOD
 
Calavera calculo de estructuras de cimentacion.pdf
Calavera calculo de estructuras de cimentacion.pdfCalavera calculo de estructuras de cimentacion.pdf
Calavera calculo de estructuras de cimentacion.pdfyoseka196
 
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVILClase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVILProblemSolved
 
Principales aportes de la carrera de William Edwards Deming
Principales aportes de la carrera de William Edwards DemingPrincipales aportes de la carrera de William Edwards Deming
Principales aportes de la carrera de William Edwards DemingKevinCabrera96
 
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdfCristhianZetaNima
 
ECONOMIA APLICADA SEMANA 555555555544.pdf
ECONOMIA APLICADA SEMANA 555555555544.pdfECONOMIA APLICADA SEMANA 555555555544.pdf
ECONOMIA APLICADA SEMANA 555555555544.pdfmatepura
 
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023COMPEDIOS ESTADISTICOS DE PERU EN EL 2023
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023RonaldoPaucarMontes
 
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONALCHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONALKATHIAMILAGRITOSSANC
 
El proyecto “ITC SE Lambayeque Norte 220 kV con seccionamiento de la LT 220 kV
El proyecto “ITC SE Lambayeque Norte 220 kV con seccionamiento de la LT 220 kVEl proyecto “ITC SE Lambayeque Norte 220 kV con seccionamiento de la LT 220 kV
El proyecto “ITC SE Lambayeque Norte 220 kV con seccionamiento de la LT 220 kVSebastianPaez47
 
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptxProcesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptxJuanPablo452634
 
aCARGA y FUERZA UNI 19 marzo 2024-22.ppt
aCARGA y FUERZA UNI 19 marzo 2024-22.pptaCARGA y FUERZA UNI 19 marzo 2024-22.ppt
aCARGA y FUERZA UNI 19 marzo 2024-22.pptCRISTOFERSERGIOCANAL
 
desarrollodeproyectoss inge. industrial
desarrollodeproyectoss  inge. industrialdesarrollodeproyectoss  inge. industrial
desarrollodeproyectoss inge. industrialGibranDiaz7
 

Último (20)

IPERC Y ATS - SEGURIDAD INDUSTRIAL PARA TODA EMPRESA
IPERC Y ATS - SEGURIDAD INDUSTRIAL PARA TODA EMPRESAIPERC Y ATS - SEGURIDAD INDUSTRIAL PARA TODA EMPRESA
IPERC Y ATS - SEGURIDAD INDUSTRIAL PARA TODA EMPRESA
 
Residente de obra y sus funciones que realiza .pdf
Residente de obra y sus funciones que realiza  .pdfResidente de obra y sus funciones que realiza  .pdf
Residente de obra y sus funciones que realiza .pdf
 
Presentación electricidad y magnetismo.pptx
Presentación electricidad y magnetismo.pptxPresentación electricidad y magnetismo.pptx
Presentación electricidad y magnetismo.pptx
 
Clase 2 Revoluciones Industriales y .pptx
Clase 2 Revoluciones Industriales y .pptxClase 2 Revoluciones Industriales y .pptx
Clase 2 Revoluciones Industriales y .pptx
 
hitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docxhitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docx
 
Manual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdfManual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdf
 
presentacion medidas de seguridad riesgo eléctrico
presentacion medidas de seguridad riesgo eléctricopresentacion medidas de seguridad riesgo eléctrico
presentacion medidas de seguridad riesgo eléctrico
 
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)
 
Una estrategia de seguridad en la nube alineada al NIST
Una estrategia de seguridad en la nube alineada al NISTUna estrategia de seguridad en la nube alineada al NIST
Una estrategia de seguridad en la nube alineada al NIST
 
Calavera calculo de estructuras de cimentacion.pdf
Calavera calculo de estructuras de cimentacion.pdfCalavera calculo de estructuras de cimentacion.pdf
Calavera calculo de estructuras de cimentacion.pdf
 
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVILClase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
 
Principales aportes de la carrera de William Edwards Deming
Principales aportes de la carrera de William Edwards DemingPrincipales aportes de la carrera de William Edwards Deming
Principales aportes de la carrera de William Edwards Deming
 
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf
 
ECONOMIA APLICADA SEMANA 555555555544.pdf
ECONOMIA APLICADA SEMANA 555555555544.pdfECONOMIA APLICADA SEMANA 555555555544.pdf
ECONOMIA APLICADA SEMANA 555555555544.pdf
 
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023COMPEDIOS ESTADISTICOS DE PERU EN EL 2023
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023
 
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONALCHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
 
El proyecto “ITC SE Lambayeque Norte 220 kV con seccionamiento de la LT 220 kV
El proyecto “ITC SE Lambayeque Norte 220 kV con seccionamiento de la LT 220 kVEl proyecto “ITC SE Lambayeque Norte 220 kV con seccionamiento de la LT 220 kV
El proyecto “ITC SE Lambayeque Norte 220 kV con seccionamiento de la LT 220 kV
 
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptxProcesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
 
aCARGA y FUERZA UNI 19 marzo 2024-22.ppt
aCARGA y FUERZA UNI 19 marzo 2024-22.pptaCARGA y FUERZA UNI 19 marzo 2024-22.ppt
aCARGA y FUERZA UNI 19 marzo 2024-22.ppt
 
desarrollodeproyectoss inge. industrial
desarrollodeproyectoss  inge. industrialdesarrollodeproyectoss  inge. industrial
desarrollodeproyectoss inge. industrial
 

Topicos Avanzados de Programacion - Unidad 4 programacion concurrente

  • 1. Ingeniería en Sistemas Computacionales Tópicos Avanzados de Programación Unidad IV: Programación Concurrente (Multi-hilos) Este material está desarrollado para la asignatura Tópicos Avanzados de Programación, de la carrera de Ingeniería en Sistemas Computacionales, plan de estudios ISIC-2010-224 TÓPICOS AVANZADOS DE PROGRAMACIÓN
  • 2. TÓPICOS AVANZADOS DE PROGRAMACIÓN Competencia: Resolver problemas utilizando programación concurrente.
  • 3. Concepto de hilo. • Un hilo es un proceso que se está ejecutando en un momento determinado en nuestro sistema operativo, como cualquier otra tarea, esto se realiza directamente en el procesador. • Existen los llamados “demonios” que son los procesos que define el sistema operativo en sí para poder funcionar y otros que llamaremos los hilos definidos por el usuario o por el programador, estos últimos son procesos a los que el programador define un comportamiento e inicia en un momento específico. TÓPICOS AVANZADOS DE PROGRAMACIÓN
  • 4. • En .NET, cuando se lanza una aplicación se crea un proceso y dentro de este proceso un hilo de ejecución o thread para el método main(). • Es posible, a la vez que se ejecuta el método main(), que la aplicación lance internamente nuevos hilos de ejecución en los que se ejecute el código de algún método. TÓPICOS AVANZADOS DE PROGRAMACIÓN
  • 5. • Un ejemplo muy actual de utilización de threads es una aplicación de tipo servidor Web, como el IIS, Apache Web Server, etc. • Un servidor Web es una aplicación que, al ser lanzada y creado para ella un proceso y un hilo para el método main(), espera a que llegue una petición http de un cliente al puerto que escucha (el 80 generalmente) y cuando llega hace dos cosas: • Crea un nuevo hilo de ejecución o thread en el que atiende la petición. • Vuelve inmediatamente (en el hilo principal) a escuchar el puerto para atender nuevas peticiones (mientras se atiende la petición en el nuevo hilo). TÓPICOS AVANZADOS DE PROGRAMACIÓN
  • 6. • En equipos con menos procesadores que hilos o threads lanzados en un momento dado, se habla de concurrencia aparente, ya que todos los hilos no pueden estar ejecutándose a la vez. • No obstante, no se ha de pensar que tener un solo procesador hace inútil lanzar más de un hilo o thread simultáneamente. Ni mucho menos, el 100% del tiempo de ejecución de un hilo no está ocupado el procesador (interacción con el usuario, entrada/salida, acceso a memoria), de modo que otro hilo puede aprovechar sus tiempos muertos. TÓPICOS AVANZADOS DE PROGRAMACIÓN
  • 7. • También es cierto que un exceso de threads o hilos resulta negativo, ya que se puede perder más tiempo “saltando” de un thread a otro que en la ejecución real (a esta operación se la llama “conmutación de contexto” e implica salvar y recuperar datos y registros de memoria). TÓPICOS AVANZADOS DE PROGRAMACIÓN
  • 8. • En Windows, aunque sólo se disponga de un procesador, se permite ejecutar varios hilos simultáneamente (concurrencia aparente). Lo que se hace es ofrecer un tiempo determinado de ejecución (time slice o “rodaja de tiempo”) a cada hilo (realmente son milisegundos). Cuando ese tiempo finaliza, Windows retoma el control y se lo cede a otro thread. • De este modo se ofrece al usuario la ilusión de tener varias aplicaciones en ejecución simultáneamente y también se optimiza el uso de los recursos. A este modo de organizar la ejecución de varios threads se le llama preemptive multitasking (“multitarea preemptiva”). • En realidad, el sistema operativo y cualquier hilo que se lance ya son dos hilos, con lo cual la ejecución en Windows es siempre multihilo. TÓPICOS AVANZADOS DE PROGRAMACIÓN
  • 9. La clase Thread. • Esta clase pertenece al namespace System.Threading. Para crear un thread sólo hay que crear una instancia de esta clase. Sus métodos más importantes son: •start: lanza el thread a ejecución. •suspend: detiene momentáneamente la ejecución del thread. •resume: activa el thread suspendido, es decir, lo vuelve a poner en ejecución. •abort: aborta o para de modo inmediato la ejecución del thread. •join: detiene el thread donde se invoca hasta que el thread para el que se le invoca termina. TÓPICOS AVANZADOS DE PROGRAMACIÓN
  • 10. Las propiedades más interesantes de la clase Thread son: • Name: permite darle un nombre a un thread que lo distinga del resto. • CurrentThread: contiene una referencia al thread que está actualmente en ejecución. TÓPICOS AVANZADOS DE PROGRAMACIÓN
  • 11. Ejecución de un thread • Un thread no es más que un bloque de código vacío por defecto que es posible lanzar a ejecución de modo simultáneo a otros threads. • Supóngase que se desea crear una aplicación desde la que se lance un thread que referencie una función que muestre 10 veces un mensaje (“Hola, soy el thread”) en la consola. La aplicación lanzará también la función desde el thread principal de la aplicación (main). • El código necesario para crearlo es el siguiente: TÓPICOS AVANZADOS DE PROGRAMACIÓN
  • 12. TÓPICOS AVANZADOS DE PROGRAMACIÓN
  • 13. Detener y activación de un Thread • Una vez un thread ha sido lanzado puede ser suspendido (suspend), reactivado (resume) o abortado (abort). • suspend y resume: suspend suspende la ejecución de un thread momentáneamente. • Un thread suspendido puede ser reactivado llamando a resume. Si no se utilizan bien pueden causar situaciones de bloqueo no recuperables. • abort: lanza una excepción ThreadAbortException en el thread. El tratamiento por defecto para esta excepción es finalizar la ejecución del thread. No obstante si se captura la excepción, se puede programar el tratamiento que se desee. TÓPICOS AVANZADOS DE PROGRAMACIÓN
  • 14. Propiedades Name y CurrentThread • Con la propiedad Name puede darse nombre a ambos threads; y • La propiedad CurrentThread puede obtenerse el thread principal para darle nombre. Propiedad Join • El método Join pertenece a la clase Thread y lo que hace es detener la ejecución del thread donde se invoca hasta que el thread para el que se invoca termina. TÓPICOS AVANZADOS DE PROGRAMACIÓN
  • 18. Consideraciones Application.Run(): Esta instrucción ejecuta una forma como aplicación, es la apropiada para abrir un nuevo hilo. Application.Exit(): Cierra la aplicación actual. Se debe tener cuidado al utilizarla ya que si hay hilos que fueron ejecutados por esta aplicación se cerrarán también. Lo mejor es usarla solo en el formulario principal. this.close(): Esta instrucción es la más apropiada para cerrar una forma que fue abierta como hilo ya que solo cierra el formulario o hilo actual pero no cierra la aplicación. TÓPICOS AVANZADOS DE PROGRAMACIÓN
  • 19. Ejercicio: Abecedario con Hilos Realice un programa utilizando hilos que haga lo siguiente: • Debe lanzar 10 hilos que desplieguen el abecedario inglés en minúsculas (códigos ascii del 65 al 90) • Cada hilo debe tener un nombre que haga referencia al número de hilo actual y se debe desplegar cuando se lanza por primera vez, y también junto a cada letra del abecedario. TÓPICOS AVANZADOS DE PROGRAMACIÓN
  • 22. Prioridades • Cuando se lanzan varios threads para que se ejecuten simultáneamente, se les asignan las “rodajas de tiempo” en función del valor que tenga su propiedad Priority. • La propiedad Priority es una propiedad pública de la clase Thread (no es static). Realmente es una enumeración del tipo ThreadPriority, cuyos posibles valores son: TÓPICOS AVANZADOS DE PROGRAMACIÓN
  • 23. Sincronización: • La sincronización de threads consiste en asegurar que distintos threads acceden de modo coordinado a recursos compartidos. • El caso más sencillo es la sincronización del uso del procesador, lo cual se lleva a cabo por el sistema operativo mediante la “multitarea preemptiva” (“rodajas de tiempo”). • Pero existen otras situaciones en las que la sincronización es necesaria y no la hace por defecto el sistema operativo. TÓPICOS AVANZADOS DE PROGRAMACIÓN
  • 24. lock • La sentencia lock bloquea el acceso a un bloque de código, asegurando que sólo el thread que lo ha bloqueado tiene acceso a tal bloque. Supóngase la siguiente clase: TÓPICOS AVANZADOS DE PROGRAMACIÓN
  • 25. TÓPICOS AVANZADOS DE PROGRAMACIÓN
  • 26. TÓPICOS AVANZADOS DE PROGRAMACIÓN
  • 27. Clase System.Threading.Monitor • La clase Monitor implementa el concepto de monitor de sincronización. Del mismo modo que existe esta clase existen otras como Mutex, etc. • la sentencia lock equivale a utilizar un Monitor llamando a sus métodos Enter (al comienzo del bloque) y Exit (al final del bloque). TÓPICOS AVANZADOS DE PROGRAMACIÓN
  • 28. Los métodos más importantes de la clase monitor son: • Enter: bloquea el segmento de código al que precede. • TryEnter: es similar a Enter pero no bloquea o produce sólo un bloqueo temporal. • Exit: libera el bloque. • Wait: Detiene al thread que lo llama (muy importante, no bloquea el código a otros threads sino que detiene al thread llamador) dejándolo en espera de que otro thread le notifique que puede seguir mediante el método Pulse. También libera el bloqueo que haya hecho ese thread si es que lo hay. • Pulse: notifica a un thread en la cola de espera (Wait) que puede continuar. • PulseAll: realiza la notificación a todos los threads de la cola de espera. TÓPICOS AVANZADOS DE PROGRAMACIÓN
  • 29. A continuación, como ejemplo, se sustituye en el ejercicio anterior lock por las correpondientes llamadas a Enter y Exit en la clase Monitor. int Realizar_Transaccion(int cantidad) { //comentar este método para ver el problema de no usarlo Monitor.Enter(this); { if (saldo >= cantidad) { Thread.Sleep(5); saldo = saldo - cantidad; System.Console.Write (Thread.CurrentThread.Name.ToString()); System.Console.WriteLine ("-- Saldo= " +saldo.ToString()); Monitor.Exit(this); return saldo; } else TÓPICOS AVANZADOS DE PROGRAMACIÓN
  • 30. { // continuacion del Else //si el balance es menor que la cantidad que se desea retirar //se deniega la transacción System.Console.Write (Thread.CurrentThread.Name.ToString()); System.Console.Write ("-- Transacción denegada."); System.Console.WriteLine ("-- El saldo sería= " +(saldo - cantidad)); Monitor.Exit(this); return 0; } } } Nota: Se puede observar que las llamadas a Exit han de ser antes de return o no se ejecutarán. TÓPICOS AVANZADOS DE PROGRAMACIÓN
  • 31. • Clase Mutex (Mutual Exclusion); Su funcionalidad es asegurar que solamente un hilo pueda tener a acceso a un recurso, o porción de código, esta clase puede ser usada para evitar que múltiples instancias de una aplicación sean iniciadas. • Aparentemente la funcionalidad de la clase Mutex es muy parecida a Lock, una de las grandes diferencias entre ellas es que Mutex es una clase y Lock es una Instrucción, la funcionalidad de Mutex es mayor ya que permite manejar bloqueo a nivel de Sistema Operativo, de tal forma que actúa a nivel de proceso. • Cuando un Hilo adquiere una exclusión mutua (mutex), el siguiente Hilo que intenta adquirir dicha exclusión mutua se suspende hasta que el primer subproceso libera la exclusión mutua. TÓPICOS AVANZADOS DE PROGRAMACIÓN
  • 32. • Existen dos tipo de exclusiones mutuas: exclusiones mutuas locales y exclusiones mutuas del sistema con nombre. • Si crea un objeto Mutex con un constructor que acepta un nombre, se asocia a un objeto del sistema operativo con dicho nombre. Las exclusiones mutuas del sistema con nombre son visibles en todo el sistema operativo y se pueden utilizar para sincronizar las actividades de los procesos. • Con respecto al desempeño de la utilización de Mutex Vs Lock, La instrucción Lock es mucho mas rápida que la utilización de la clase Mutex. TÓPICOS AVANZADOS DE PROGRAMACIÓN
  • 33. • Para utilizar la clase Mutex , se requiere el método WaitOne el cual obtiene el bloqueo exclusivo de un contenido a bloquear. Dicho bloque es liberado con el método ReleaseMutex. De la misma forma que se bloqueo con Lock , la clase Mutex puede ser liberada únicamente con la terminación del hilo que la llamo. private static Mutex mut = new Mutex(); TÓPICOS AVANZADOS DE PROGRAMACIÓN
  • 34. • Ejemplo private static Mutex mut = new Mutex(); public void Sumar() { mut.WaitOne(); Console.WriteLine("{0} Ingresando de Codigo Protegido", Thread.CurrentThread.Name); resultado = operador1 + operador2; //Bloqueamos el Hilo actual durante un segundo Thread.Sleep(1000); Console.WriteLine("El resultado de la Suma es:" + resultado); Console.WriteLine("{0} Saliendo de Codigo Protegidon",Thread.CurrentThread.Name); mut.ReleaseMutex(); } TÓPICOS AVANZADOS DE PROGRAMACIÓN
  • 35. Problema de los filósofos comensales: • Hay cinco filósofos sentados alrededor de una mesa que pasan su vida cenando y pensando. Cada uno dispone de un plato de arroz y un palillo a la izquierda de su plato, pero para comer son necesarios dos palillos y cada filósofo sólo puede sujetar el que está a su izquierda o el que hay a su derecha. Con un solo palillo en la mano no tienen más remedio que esperar hasta que atrapen otro y puedan seguir comiendo. • Si dos filósofos adyacentes intentan tomar el mismo palillo a la vez se produce una condición de carrera: ambos compiten por lo mismo pero uno se queda sin comer. TÓPICOS AVANZADOS DE PROGRAMACIÓN
  • 36. • Si todos los filósofos cogen el palillo de su derecha al mismo tiempo, todos se quedarán esperando eternamente porque alguien debe liberar el palillo que les falta, cosa que nadie hará porque todos se encuentran en la misma situación (esperando que alguno deje su palillo). Llegado esto, los filósofos se morirán de hambre. A este bloqueo mutuo se le denomina interbloqueo o deadlock. TÓPICOS AVANZADOS DE PROGRAMACIÓN
  • 37. El objetivo consiste en encontrar un recurso que permita que los filósofos nunca se mueran de hambre. Porque: • Dos filósofos contiguos no pueden comer a la vez (exclusión mutua). • Si un filósofo está comiendo, los contiguos no pueden hacerlo hasta que él termine (sincronización). • El filósofo que termina de comer debe ceder los palillos para su posterior utilización (interbloqueo). TÓPICOS AVANZADOS DE PROGRAMACIÓN