Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Threads
Varias hebras (threads) de ejecucin a la "vez". El runtime distribuye el tiempo del CPU (los CPU) y le asigna una porcin (time slicing) a cada hebra La clase Thread en System.Threading se crea pasndole un delegate del tipo delegate void ThreadStart(); es decir un mtodo que devuelva void y no tenga parmetros
jemplo 1
Arrancan el programa principal
Una hebra se puede interrumpir, abortar, suspender a otra Cada hebra tiene su propio stack
ncronizacin
Problema cuando dos hebras acceden a un mismo recurso y cada una puede modificar a dicho recurso sin que la otra lo sepa recurso compartido
Tiempo comienza a usar el recurso
modifica el recurso
ncronizacin
Problema cuando dos hebras acceden a un mismo recurso y cada una puede modificar a dicho recurso sin que la otra lo sepa Una agencia de viajes tiene varios vendedores que venden plazas de vuelos sobre una misma base de datos lock(recurso){ ... } ninguna otra hebra puede acceder al recurso mientras la hebra est dentro del lock
ductor-Consumidor
Varias hebras producen mientras que paralelamente otras hebras consumen lo que las otras producen Varias usuarios producen emails que se ponen en una cola y un servidor los enva Cuidar que no se est poniendo en la cola mientras se est sacando un mismo elemento
Deadlock
Todos los filsofos piensan y comen Para comer necesitan apropiarse de los dos tenedores a su izquierda y a su derecha Qu pasa si todos se han apropiado del de su izquierda y su vecino ya se apropi del de su derecha? DEADLOCK (interbloqueo)
Deadlock
emforos
Tipo de datos que tiene un valor entero asociado y que es operado a travs de primitivas conocidas como P y V (son indivisibles e ininterrumpibles)
emforos . . .
Queue c; semaphore exmutua = 1; semaphore capacidad = c.size(); semaphore hayalgo = 0; process productor { while (true) { produce un x P(capacidad); //espera por espacio P(exmutua); c.append(x); V(exmutua); V(hayalgo); } } //indicar que no est vaco //espera para apropiarse de la cola
emforos . . .
process consumidor { T x; while (true) { P(hayalgo); P(exmutua); //espera porque no este vacio //espera para apropiarse de la cola
x = c.remove(); //saca de la cola V(exmutua); ...consume x ... V(capacidad); } } //indicar que no est lleno //libera la cola
emforos . . .
Son recursos muy primitivos de muy bajo nivel, pasan mucha carga al programador => propenso a errores