martes, 8 de diciembre de 2015

Hilos con C# (Threads) , ThreadStaticAttribute

Un hilo tiene su propio pila de llamada que almacena todos los métodos que son ejecutados por el hilo. Las variables locales son almacenados en la pila de llamada y son privadas al hilo.

Un hilo también puede tener sus propios datos que no son variables locales. Un campo puede mantener una copia dentro de cada hilo que se tenga, para lo cual se le coloca el atributo ThreadStatic. Como se puede ver en el siguiente ejemplo.

using System;
using System.Threading;

namespace UsandoThreadStaticAttribute
{
    class Program
    {

       //  El valor máximo del campo:  _campo será de 10, si el atributo es
       // retirado el valor alcanza el valor de 20
        [ThreadStatic]
        public static int _campo;

        static void Main(string[] args)
        {
            new Thread(() => 
            {
                for (int i = 0; i < 10; i++)
                {
                    _campo++;
                    Console.WriteLine("Hilo A {0}", _campo);
                }
            }).Start();


            new Thread(() =>
            {
                for (int i = 0; i < 10; i++)
                {
                    _campo++;
                    Console.WriteLine("Hilo B {0}", _campo);

                }
            }).Start();

            Console.ReadKey();

        }
    }
}

La imagen presenta la salida.



No hay comentarios.:

Publicar un comentario