SlideShare una empresa de Scribd logo
1 de 38
TECNOLÓGICO NACIONAL DE MÉXICO
Ingeniería en Sistemas Computacionales
Tópicos Avanzados de Programación
Unidad III: Programación Concurrente (Multihilos)
Este material didáctico fue desarrollado para la asignatura de Tópicos Avanzados de Programación,
del plan SCD-1027 2016 de Ing. En Sistemas Computacionales
Competencia: Crea subprogramas para resolver problemas
concurrentes utilizando multihilos.
TÓPICOS AVANZADOS DE PROGRAMACIÓN
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
Bibliografía
• Patrick LeBlanc. 2015. Microsoft Visual C# 2013 Step by Step. EE. UU. Octal
Publishing, Inc. ISBN: 978-0-7356-8183-5.
TÓPICOS AVANZADOS DE PROGRAMACIÓN

Más contenido relacionado

La actualidad más candente

Tópicos Avanzados de Programación - Unidad 4 Acceso a datos
Tópicos Avanzados de Programación - Unidad 4 Acceso a datosTópicos Avanzados de Programación - Unidad 4 Acceso a datos
Tópicos Avanzados de Programación - Unidad 4 Acceso a datosJosé Antonio Sandoval Acosta
 
Topicos Avanzados de Programacion - Unidad 4 programacion concurrente
Topicos Avanzados de Programacion - Unidad 4 programacion concurrenteTopicos Avanzados de Programacion - Unidad 4 programacion concurrente
Topicos Avanzados de Programacion - Unidad 4 programacion concurrenteJosé Antonio Sandoval Acosta
 
Procesos Ligeros: Hilos o Hebras
Procesos Ligeros: Hilos o HebrasProcesos Ligeros: Hilos o Hebras
Procesos Ligeros: Hilos o HebrasJ M
 
Fundamentos de Ingenieria de Software - Unidad 1 modelo de negocios
Fundamentos de Ingenieria de Software - Unidad 1 modelo de negociosFundamentos de Ingenieria de Software - Unidad 1 modelo de negocios
Fundamentos de Ingenieria de Software - Unidad 1 modelo de negociosJosé Antonio Sandoval Acosta
 
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regulares
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regularesPortafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regulares
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regularesHumano Terricola
 
Algoritmos DEKKER y PETERSON
Algoritmos DEKKER y PETERSONAlgoritmos DEKKER y PETERSON
Algoritmos DEKKER y PETERSONPANAFMX
 
Principios electricos y aplicaciones digitalesl sesion 1
Principios electricos y aplicaciones digitalesl sesion 1Principios electricos y aplicaciones digitalesl sesion 1
Principios electricos y aplicaciones digitalesl sesion 1Rodolfo Alcantara Rosales
 
Modelos de arquitecturas de computadoras
Modelos de arquitecturas de computadorasModelos de arquitecturas de computadoras
Modelos de arquitecturas de computadorasYESENIA CETINA
 
Qué es uml, PARA QUE SIRVE, PASOS
Qué es uml, PARA QUE SIRVE, PASOSQué es uml, PARA QUE SIRVE, PASOS
Qué es uml, PARA QUE SIRVE, PASOSmyle22
 
Desarrollar aplicación completa en Java con conexión base de datos MySql
Desarrollar aplicación completa en Java con conexión base de datos MySqlDesarrollar aplicación completa en Java con conexión base de datos MySql
Desarrollar aplicación completa en Java con conexión base de datos MySqlJavashi
 

La actualidad más candente (20)

Tópicos Avanzados de Programación - Unidad 4 Acceso a datos
Tópicos Avanzados de Programación - Unidad 4 Acceso a datosTópicos Avanzados de Programación - Unidad 4 Acceso a datos
Tópicos Avanzados de Programación - Unidad 4 Acceso a datos
 
Topicos Avanzados de Programacion - Unidad 4 programacion concurrente
Topicos Avanzados de Programacion - Unidad 4 programacion concurrenteTopicos Avanzados de Programacion - Unidad 4 programacion concurrente
Topicos Avanzados de Programacion - Unidad 4 programacion concurrente
 
Procesos Ligeros: Hilos o Hebras
Procesos Ligeros: Hilos o HebrasProcesos Ligeros: Hilos o Hebras
Procesos Ligeros: Hilos o Hebras
 
Fundamentos de Ingenieria de Software - Unidad 1 modelo de negocios
Fundamentos de Ingenieria de Software - Unidad 1 modelo de negociosFundamentos de Ingenieria de Software - Unidad 1 modelo de negocios
Fundamentos de Ingenieria de Software - Unidad 1 modelo de negocios
 
Tipos de listas en estructura de datos
Tipos de listas en estructura de datosTipos de listas en estructura de datos
Tipos de listas en estructura de datos
 
Cuadro comparativo sgbd
Cuadro comparativo sgbdCuadro comparativo sgbd
Cuadro comparativo sgbd
 
Noción de archivo real y virtual
Noción de archivo real y virtual Noción de archivo real y virtual
Noción de archivo real y virtual
 
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regulares
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regularesPortafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regulares
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regulares
 
control de concurrencia
control de concurrenciacontrol de concurrencia
control de concurrencia
 
Java con base de datos
Java con base de datosJava con base de datos
Java con base de datos
 
Algoritmos DEKKER y PETERSON
Algoritmos DEKKER y PETERSONAlgoritmos DEKKER y PETERSON
Algoritmos DEKKER y PETERSON
 
Principios electricos y aplicaciones digitalesl sesion 1
Principios electricos y aplicaciones digitalesl sesion 1Principios electricos y aplicaciones digitalesl sesion 1
Principios electricos y aplicaciones digitalesl sesion 1
 
Metodologia orientada a objeto
Metodologia orientada a objetoMetodologia orientada a objeto
Metodologia orientada a objeto
 
3.creacion de componentes visuales
3.creacion de componentes visuales3.creacion de componentes visuales
3.creacion de componentes visuales
 
Modelos de arquitecturas de computadoras
Modelos de arquitecturas de computadorasModelos de arquitecturas de computadoras
Modelos de arquitecturas de computadoras
 
Qué es uml, PARA QUE SIRVE, PASOS
Qué es uml, PARA QUE SIRVE, PASOSQué es uml, PARA QUE SIRVE, PASOS
Qué es uml, PARA QUE SIRVE, PASOS
 
Desarrollar aplicación completa en Java con conexión base de datos MySql
Desarrollar aplicación completa en Java con conexión base de datos MySqlDesarrollar aplicación completa en Java con conexión base de datos MySql
Desarrollar aplicación completa en Java con conexión base de datos MySql
 
Herramientas case full informacion
Herramientas case full informacionHerramientas case full informacion
Herramientas case full informacion
 
Algebra relacional
Algebra relacionalAlgebra relacional
Algebra relacional
 
Ingenieria de software
Ingenieria de softwareIngenieria de software
Ingenieria de software
 

Destacado

Tópicos Avanzados de Programación - Unidad 5 Programacion movil
Tópicos Avanzados de Programación - Unidad 5 Programacion movilTópicos Avanzados de Programación - Unidad 5 Programacion movil
Tópicos Avanzados de Programación - Unidad 5 Programacion movilJosé Antonio Sandoval Acosta
 
Gestión de Proyectos de Software - Unidad II: Calidad en el Software
Gestión de Proyectos de Software - Unidad II: Calidad en el SoftwareGestión de Proyectos de Software - Unidad II: Calidad en el Software
Gestión de Proyectos de Software - Unidad II: Calidad en el SoftwareJosé Antonio Sandoval Acosta
 
Gestión de Proyectos de Software - Unidad 1 Introducción a la Gestión de Proy...
Gestión de Proyectos de Software - Unidad 1 Introducción a la Gestión de Proy...Gestión de Proyectos de Software - Unidad 1 Introducción a la Gestión de Proy...
Gestión de Proyectos de Software - Unidad 1 Introducción a la Gestión de Proy...José Antonio Sandoval Acosta
 
M4 4.2 actividad 2 Presentación Asertum - Hexágono de evaluación
M4 4.2 actividad 2 Presentación Asertum - Hexágono de evaluaciónM4 4.2 actividad 2 Presentación Asertum - Hexágono de evaluación
M4 4.2 actividad 2 Presentación Asertum - Hexágono de evaluaciónJosé Antonio Sandoval Acosta
 
Matemáticas Discretas - Unidad 1 Sistemas numericos
Matemáticas Discretas - Unidad 1 Sistemas numericosMatemáticas Discretas - Unidad 1 Sistemas numericos
Matemáticas Discretas - Unidad 1 Sistemas numericosJosé Antonio Sandoval Acosta
 
Tema 4.3.1. Actividad 2: Instrumentos de Evaluación
Tema 4.3.1. Actividad 2: Instrumentos de EvaluaciónTema 4.3.1. Actividad 2: Instrumentos de Evaluación
Tema 4.3.1. Actividad 2: Instrumentos de EvaluaciónJosé Antonio Sandoval Acosta
 
Fundamentos de Telecomunicaciones Unidad 2 medios de transmisión y caracterís...
Fundamentos de Telecomunicaciones Unidad 2 medios de transmisión y caracterís...Fundamentos de Telecomunicaciones Unidad 2 medios de transmisión y caracterís...
Fundamentos de Telecomunicaciones Unidad 2 medios de transmisión y caracterís...José Antonio Sandoval Acosta
 
Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...
Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...
Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...José Antonio Sandoval Acosta
 
Matemáticas Discretas - Unidad III: Logica matemática
Matemáticas Discretas - Unidad III: Logica matemáticaMatemáticas Discretas - Unidad III: Logica matemática
Matemáticas Discretas - Unidad III: Logica matemáticaJosé Antonio Sandoval Acosta
 
Tópicos avanzados de programación eventos
Tópicos  avanzados  de programación   eventosTópicos  avanzados  de programación   eventos
Tópicos avanzados de programación eventosKanddy Mobylml
 
Topicos Avanzados de Programacion - Unidad 5 programacion movil
Topicos Avanzados de Programacion -  Unidad 5 programacion movilTopicos Avanzados de Programacion -  Unidad 5 programacion movil
Topicos Avanzados de Programacion - Unidad 5 programacion movilJosé Antonio Sandoval Acosta
 

Destacado (20)

Tópicos Avanzados de Programación - Unidad 5 Programacion movil
Tópicos Avanzados de Programación - Unidad 5 Programacion movilTópicos Avanzados de Programación - Unidad 5 Programacion movil
Tópicos Avanzados de Programación - Unidad 5 Programacion movil
 
Gestión de Proyectos de Software - Unidad II: Calidad en el Software
Gestión de Proyectos de Software - Unidad II: Calidad en el SoftwareGestión de Proyectos de Software - Unidad II: Calidad en el Software
Gestión de Proyectos de Software - Unidad II: Calidad en el Software
 
Gestión de Proyectos de Software - Unidad 1 Introducción a la Gestión de Proy...
Gestión de Proyectos de Software - Unidad 1 Introducción a la Gestión de Proy...Gestión de Proyectos de Software - Unidad 1 Introducción a la Gestión de Proy...
Gestión de Proyectos de Software - Unidad 1 Introducción a la Gestión de Proy...
 
M4 4.2 actividad 2 Presentación Asertum - Hexágono de evaluación
M4 4.2 actividad 2 Presentación Asertum - Hexágono de evaluaciónM4 4.2 actividad 2 Presentación Asertum - Hexágono de evaluación
M4 4.2 actividad 2 Presentación Asertum - Hexágono de evaluación
 
Como hacer un Mapa Mental
Como hacer un Mapa MentalComo hacer un Mapa Mental
Como hacer un Mapa Mental
 
Matemáticas Discretas - Unidad 1 Sistemas numericos
Matemáticas Discretas - Unidad 1 Sistemas numericosMatemáticas Discretas - Unidad 1 Sistemas numericos
Matemáticas Discretas - Unidad 1 Sistemas numericos
 
Matemáticas Discretas - Unidad 2 Conjuntos
Matemáticas Discretas - Unidad 2 ConjuntosMatemáticas Discretas - Unidad 2 Conjuntos
Matemáticas Discretas - Unidad 2 Conjuntos
 
Elaboracion de mapas conceptuales
Elaboracion de mapas conceptualesElaboracion de mapas conceptuales
Elaboracion de mapas conceptuales
 
Tema 4.3.1. Actividad 2: Instrumentos de Evaluación
Tema 4.3.1. Actividad 2: Instrumentos de EvaluaciónTema 4.3.1. Actividad 2: Instrumentos de Evaluación
Tema 4.3.1. Actividad 2: Instrumentos de Evaluación
 
Fundamentos de Telecomunicaciones Unidad 2 medios de transmisión y caracterís...
Fundamentos de Telecomunicaciones Unidad 2 medios de transmisión y caracterís...Fundamentos de Telecomunicaciones Unidad 2 medios de transmisión y caracterís...
Fundamentos de Telecomunicaciones Unidad 2 medios de transmisión y caracterís...
 
Topicos Avanzados de Programacion Unidad 1 Eventos
Topicos Avanzados de Programacion Unidad 1 EventosTopicos Avanzados de Programacion Unidad 1 Eventos
Topicos Avanzados de Programacion Unidad 1 Eventos
 
Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...
Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...
Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...
 
Matemáticas Discretas - Unidad III: Logica matemática
Matemáticas Discretas - Unidad III: Logica matemáticaMatemáticas Discretas - Unidad III: Logica matemática
Matemáticas Discretas - Unidad III: Logica matemática
 
Sesion12-componentes Visuales java
Sesion12-componentes Visuales javaSesion12-componentes Visuales java
Sesion12-componentes Visuales java
 
Tópicos avanzados de programación eventos
Tópicos  avanzados  de programación   eventosTópicos  avanzados  de programación   eventos
Tópicos avanzados de programación eventos
 
Elaboracion de un curriculum vitae
Elaboracion de un curriculum vitaeElaboracion de un curriculum vitae
Elaboracion de un curriculum vitae
 
M1 actividad 2.1 Ensayo
M1 actividad 2.1 EnsayoM1 actividad 2.1 Ensayo
M1 actividad 2.1 Ensayo
 
Fundamentos de BD - Unidad 6 lenguaje sql
Fundamentos de BD - Unidad 6 lenguaje sqlFundamentos de BD - Unidad 6 lenguaje sql
Fundamentos de BD - Unidad 6 lenguaje sql
 
Topicos Avanzados de Programacion - Unidad 5 programacion movil
Topicos Avanzados de Programacion -  Unidad 5 programacion movilTopicos Avanzados de Programacion -  Unidad 5 programacion movil
Topicos Avanzados de Programacion - Unidad 5 programacion movil
 
Fundamentos de BD - Unidad 5 algebra relacional
Fundamentos de BD - Unidad 5 algebra relacionalFundamentos de BD - Unidad 5 algebra relacional
Fundamentos de BD - Unidad 5 algebra relacional
 

Similar a Programación concurrente con multihilos (20)

DIAPOSITIVAS UNIDAD3.pdf
DIAPOSITIVAS UNIDAD3.pdfDIAPOSITIVAS UNIDAD3.pdf
DIAPOSITIVAS UNIDAD3.pdf
 
Lps 17 hilos
Lps 17 hilosLps 17 hilos
Lps 17 hilos
 
Uso de threads en C#
Uso de threads en C#Uso de threads en C#
Uso de threads en C#
 
hilosJava.pptx
hilosJava.pptxhilosJava.pptx
hilosJava.pptx
 
Chap 15apin
Chap 15apinChap 15apin
Chap 15apin
 
Threads
ThreadsThreads
Threads
 
Thread
ThreadThread
Thread
 
Hilos En Java
Hilos En JavaHilos En Java
Hilos En Java
 
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
 
Thread
ThreadThread
Thread
 
Programación multitarea
Programación multitareaProgramación multitarea
Programación multitarea
 
Programación multihebra en java
Programación multihebra en javaProgramación multihebra en java
Programación multihebra en java
 
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)
 
Lab5 guia
Lab5 guiaLab5 guia
Lab5 guia
 
hilos informatica
hilos informatica hilos informatica
hilos informatica
 

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

MODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdf
MODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdfMODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdf
MODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdfvladimirpaucarmontes
 
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptxNTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptxBRAYANJOSEPTSANJINEZ
 
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESOCAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESOLUISDAVIDVIZARRETARA
 
Sesión N°2_Curso_Ingeniería_Sanitaria.pdf
Sesión N°2_Curso_Ingeniería_Sanitaria.pdfSesión N°2_Curso_Ingeniería_Sanitaria.pdf
Sesión N°2_Curso_Ingeniería_Sanitaria.pdfannavarrom
 
Sesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
Sesión 02 TIPOS DE VALORIZACIONES CURSO CersaSesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
Sesión 02 TIPOS DE VALORIZACIONES CURSO CersaXimenaFallaLecca1
 
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
 
Manual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdfManual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdfedsonzav8
 
CLASe número 4 fotogrametria Y PARALAJE.pptx
CLASe número 4 fotogrametria Y PARALAJE.pptxCLASe número 4 fotogrametria Y PARALAJE.pptx
CLASe número 4 fotogrametria Y PARALAJE.pptxbingoscarlet
 
PPT ELABORARACION DE ADOBES 2023 (1).pdf
PPT ELABORARACION DE ADOBES 2023 (1).pdfPPT ELABORARACION DE ADOBES 2023 (1).pdf
PPT ELABORARACION DE ADOBES 2023 (1).pdfalexquispenieto2
 
INTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICA
INTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICAINTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICA
INTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICAJOSLUISCALLATAENRIQU
 
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADOPERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADOFritz Rebaza Latoche
 
Maquinaria Agricola utilizada en la produccion de Piña.pdf
Maquinaria Agricola utilizada en la produccion de Piña.pdfMaquinaria Agricola utilizada en la produccion de Piña.pdf
Maquinaria Agricola utilizada en la produccion de Piña.pdfdanielJAlejosC
 
Mapas y cartas topográficas y de suelos.pptx
Mapas y cartas topográficas y de suelos.pptxMapas y cartas topográficas y de suelos.pptx
Mapas y cartas topográficas y de suelos.pptxMONICADELROCIOMUNZON1
 
CARGAS VIVAS Y CARGAS MUERTASEXPOCI.pptx
CARGAS VIVAS Y CARGAS MUERTASEXPOCI.pptxCARGAS VIVAS Y CARGAS MUERTASEXPOCI.pptx
CARGAS VIVAS Y CARGAS MUERTASEXPOCI.pptxvalenciaespinozadavi1
 
introducción a las comunicaciones satelitales
introducción a las comunicaciones satelitalesintroducción a las comunicaciones satelitales
introducción a las comunicaciones satelitalesgovovo2388
 
Falla de san andres y el gran cañon : enfoque integral
Falla de san andres y el gran cañon : enfoque integralFalla de san andres y el gran cañon : enfoque integral
Falla de san andres y el gran cañon : enfoque integralsantirangelcor
 
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
 
Magnetismo y electromagnetismo principios
Magnetismo y electromagnetismo principiosMagnetismo y electromagnetismo principios
Magnetismo y electromagnetismo principiosMarceloQuisbert6
 
osciloscopios Mediciones Electricas ingenieria.pdf
osciloscopios Mediciones Electricas ingenieria.pdfosciloscopios Mediciones Electricas ingenieria.pdf
osciloscopios Mediciones Electricas ingenieria.pdfIvanRetambay
 
01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt
01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt
01 MATERIALES AERONAUTICOS VARIOS clase 1.pptoscarvielma45
 

Último (20)

MODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdf
MODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdfMODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdf
MODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdf
 
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptxNTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptx
 
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESOCAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
 
Sesión N°2_Curso_Ingeniería_Sanitaria.pdf
Sesión N°2_Curso_Ingeniería_Sanitaria.pdfSesión N°2_Curso_Ingeniería_Sanitaria.pdf
Sesión N°2_Curso_Ingeniería_Sanitaria.pdf
 
Sesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
Sesión 02 TIPOS DE VALORIZACIONES CURSO CersaSesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
Sesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
 
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
 
Manual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdfManual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdf
 
CLASe número 4 fotogrametria Y PARALAJE.pptx
CLASe número 4 fotogrametria Y PARALAJE.pptxCLASe número 4 fotogrametria Y PARALAJE.pptx
CLASe número 4 fotogrametria Y PARALAJE.pptx
 
PPT ELABORARACION DE ADOBES 2023 (1).pdf
PPT ELABORARACION DE ADOBES 2023 (1).pdfPPT ELABORARACION DE ADOBES 2023 (1).pdf
PPT ELABORARACION DE ADOBES 2023 (1).pdf
 
INTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICA
INTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICAINTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICA
INTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICA
 
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADOPERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
 
Maquinaria Agricola utilizada en la produccion de Piña.pdf
Maquinaria Agricola utilizada en la produccion de Piña.pdfMaquinaria Agricola utilizada en la produccion de Piña.pdf
Maquinaria Agricola utilizada en la produccion de Piña.pdf
 
Mapas y cartas topográficas y de suelos.pptx
Mapas y cartas topográficas y de suelos.pptxMapas y cartas topográficas y de suelos.pptx
Mapas y cartas topográficas y de suelos.pptx
 
CARGAS VIVAS Y CARGAS MUERTASEXPOCI.pptx
CARGAS VIVAS Y CARGAS MUERTASEXPOCI.pptxCARGAS VIVAS Y CARGAS MUERTASEXPOCI.pptx
CARGAS VIVAS Y CARGAS MUERTASEXPOCI.pptx
 
introducción a las comunicaciones satelitales
introducción a las comunicaciones satelitalesintroducción a las comunicaciones satelitales
introducción a las comunicaciones satelitales
 
Falla de san andres y el gran cañon : enfoque integral
Falla de san andres y el gran cañon : enfoque integralFalla de san andres y el gran cañon : enfoque integral
Falla de san andres y el gran cañon : enfoque integral
 
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
 
Magnetismo y electromagnetismo principios
Magnetismo y electromagnetismo principiosMagnetismo y electromagnetismo principios
Magnetismo y electromagnetismo principios
 
osciloscopios Mediciones Electricas ingenieria.pdf
osciloscopios Mediciones Electricas ingenieria.pdfosciloscopios Mediciones Electricas ingenieria.pdf
osciloscopios Mediciones Electricas ingenieria.pdf
 
01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt
01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt
01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt
 

Programación concurrente con multihilos

  • 1. TECNOLÓGICO NACIONAL DE MÉXICO Ingeniería en Sistemas Computacionales Tópicos Avanzados de Programación Unidad III: Programación Concurrente (Multihilos) Este material didáctico fue desarrollado para la asignatura de Tópicos Avanzados de Programación, del plan SCD-1027 2016 de Ing. En Sistemas Computacionales
  • 2. Competencia: Crea subprogramas para resolver problemas concurrentes utilizando multihilos. TÓPICOS AVANZADOS DE PROGRAMACIÓN
  • 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
  • 38. Bibliografía • Patrick LeBlanc. 2015. Microsoft Visual C# 2013 Step by Step. EE. UU. Octal Publishing, Inc. ISBN: 978-0-7356-8183-5. TÓPICOS AVANZADOS DE PROGRAMACIÓN