4.1 Concepto de Hilo


4.1 CONCEPTO DE HILO



Hilo (theread) llamado también proceso ligero o subproceso, es la unidad de ejecución de un proceso y esta asociado con una secuencia de instrucciones un conjunto de registros y una pila. Cuando se crea un proceso el S.O crea su primer hilo (hilo primario) en la cual puede,a su vez,crear hilos adicionales. esto pone de manifiesto que un proceso no ejecuta,si no que es sólo el espacio de direcciones donde recide el código que es ejecutado mediante uno o más hilos.




En un S.O tradicional. Cada proceso tiene un espacio de direcciones y un único hilo de control por ejemplo, considere que un programa que incluya la siguiente secuencia de operaciones para actualizar el saldo de una cuenta bancaria cuando se efectúa un nuevo ingreso:


Saldo=Cuenta.ObtenerSaldo ();


Saldo+=ingreso; 


Cuenta.EstablecerSaldo (saldo);



Este modelo de programación, en el que se ejecuta un solo hilo, es en el que estamos acostumbrados a trabajar habitualmente. Pero, siguiendo con el ejemplo anterior piensa en un banco real; en el varios cajeros pueden actuar simultáneamente. Ejecutar el mismo programa por cada uno de los cajeros tiene un costo elevado (recuerde los recursos que necesita). En cambio si el programa permitiera lanzar un hilo por cada petición de cada cajero para actualizar una cuenta, estaríamos en el caso múltiples hilos ejecutándose concurrentemente (multitriandi) . Esta característica ya es una realidad en los S.O modernos de hoy y como consecuencia contemplada en los lenguajes de programación actuales.


Cada hilo se ejecuta de forma estrictamente secuencial y tiene su propia pila en estados de los registros de UCP y su propio contador de un programa en cambio comparte el mismo espacio de direcciones, lo que significa compartir también las mismas variables globales, el mismo conjunto de ficheros abiertos, procesos hijos (no hilos hijos), señales, semáforos, etc.


Los hilos comparten la UCP de la misma forma que lo hacen los procesos pueden crear hilos hijos y se pueden bloquear no obstante mientras un hilo del mismo proceso, en el caso de hilos soportados por el kernel (núcleo del S.O: programas en ejecución que hacen que el sistema funcione), no sucediendo lo mismo con los hilos soportados por una aplicación por ejemplo en Windows NT todos los hilos son soportados por el Kernel; imaginemos que alguien llega a un cajero para depositar dinero en una cuenta y casi al mismo tiempo un segundo cliente realiza la misma operación sobre la misma cuanta en el segundo cajero quedara bloqueado asta que el registro que esta siendo actualizado por el primer cajero quede liberado.



El hilo principal.


El hilo principal es importante por dos razones:


Es el hilo a partir del cual se crean el resto de los hilos del programa. 
Normalmente, debe ser el último que finaliza su ejecución, ya que cuando el hilo principal finaliza, el programa termina. 



Aunque el hilo principal se crea automáticamente cuando el programa comienza, se puede controlar a través de un objeto Thread. Para ello se debe de obtener una referencia al mismo llamando al método currentThread( ), que es un miembro public static de Thread. Su forma general es la siguiente: 


currentThread( ) es miembro de Thread que permite obtener el hilo actual. 

– Thread t = Thread.currentThread( );

Este método devuelve una referencia al hilo desde donde fue llamado. Una vez obtenida la referencia del hilo principal, se puede controlar del mismo modo que otro hilo. 


class hilop{

  public static void main(String args[]){
  Thread t= Thread.currentThread();

System.out.println("Nombre del hilo "+ t.getName());
t.setName("toto");
try{
for(int i=5;i>=1;i--)

{ System.out.println(i);

Thread.sleep(1000);


}




}catch(InterruptedException e){



System.out.println("Interrupción del hilo principal");



}



System.out.println("Nombre del hilo "+ t.getName());



}




}


Video 
Hilos en C#



Comentarios

Entradas populares