Cómo crear hilos en C#

En C#, un sistema de subprocesos múltiples se basa en la clase Thread, que encapsula la ejecución de subprocesos. Esta clase contiene varios métodos y propiedades que ayudan a administrar y crear subprocesos y esta clase se define en el System.Threadingespacio de nombres. El System.Threadingespacio de nombres proporciona clases e interfaces que se utilizan en la programación de subprocesos múltiples.

Algunas clases de uso común en este espacio de nombres son:

Nombre de la clase Descripción
exclusión mutua Es una primitiva de sincronización que también se puede utilizar para IPS (sincronización entre procesos).
Monitor Esta clase proporciona un mecanismo que accede a los objetos de forma sincronizada.
Semáforo Esta clase se usa para limitar la cantidad de subprocesos que pueden acceder a un recurso o conjunto de recursos al mismo tiempo.
Hilo Esta clase se usa para crear y controlar un hilo, establece su prioridad y obtiene su estado.
Grupo de subprocesos Esta clase proporciona un conjunto de subprocesos que se pueden usar para ejecutar tareas, publicar elementos de trabajo, procesar E/S asincrónicas, esperar en nombre de otros subprocesos y procesar temporizadores.
ThreadLocal Esta clase proporciona almacenamiento local de subprocesos de datos.
Temporizador Esta clase proporciona un mecanismo para ejecutar un método en un subproceso de grupo de subprocesos a intervalos específicos. No se le permite heredar esta clase.
Volátil Esta clase contiene métodos para realizar operaciones de memoria volátil.

Pasos para crear un hilo en un programa C#:

  1. En primer lugar, importe System.Threadingel espacio de nombres, juega un papel importante en la creación de un hilo en su programa, ya que no tiene necesidad de escribir el nombre completo de la clase cada vez.
    Using System;
    Using System.Threading
    
  2. Ahora, cree e inicialice el objeto hilo en su método principal.
    public static void main()
    {
        Thread thr = new Thread(job1);
    }
    

    O

    También puede usar el constructor ThreadStart para inicializar una nueva instancia.

    public static void main()
    {
         Thread thr = new Thread(new ThreadStart(job1));
    }
    
  3. Ahora puede llamar a su objeto hilo.
    public static void main()
    {
        Thread thr = new Thread(job1);
        thr.Start();
    }
    

Los siguientes programas ilustran las implementaciones prácticas de los pasos anteriores:

Ejemplo 1:

// C# program to illustrate the
// creation of thread using
// non-static method
using System;
using System.Threading;
  
public class ExThread {
  
    // Non-static method
    public void mythread1()
    {
        for (int z = 0; z < 3; z++) {
            Console.WriteLine("First Thread");
        }
    }
}
  
// Driver Class
public class GFG {
  
    // Main Method
    public static void Main()
    {
        // Creating object of ExThread class
        ExThread obj = new ExThread();
  
        // Creating thread
        // Using thread class
        Thread thr = new Thread(new ThreadStart(obj.mythread1));
        thr.Start();
    }
}

Producción:

First Thread
First Thread
First Thread

Explicación: En el ejemplo anterior, tenemos una clase llamada ExThread que contiene un método no estático llamado mythread1() . Entonces creamos una instancia, es decir, obj de la clase ExThread y la referimos en el constructor de la clase ThreadStart como se indica en esta declaración Thread a = new Thread(new ThreadStart(obj.mythread1));. Usando la declaración T hread a = new Thread(new ThreadStart(obj.mythread1));, crearemos un hilo llamado thr e inicializaremos el trabajo de este hilo. Mediante el uso thr.Start();de la declaración.

Ejemplo 2:

// C# program to illustrate the creation
// of thread using static method
using System;
using System.Threading;
  
public class ExThread {
  
    // Static method for thread a
    public static void thread1()
    {
        for (int z = 0; z < 5; z++) {
            Console.WriteLine(z);
        }
    }
  
    // static method for thread b
    public static void thread2()
    {
        for (int z = 0; z < 5; z++) {
            Console.WriteLine(z);
        }
    }
}
  
// Driver Class
public class GFG {
  
    // Main method
    public static void Main()
    {
        // Creating and initializing threads
        Thread a = new Thread(ExThread.thread1);
        Thread b = new Thread(ExThread.thread2);
        a.Start();
        b.Start();
    }
}

Producción :

0
1
2
3
4
0
1
2
3
4

Explicación: En el ejemplo anterior, tenemos una clase llamada ExThread y contiene dos métodos estáticos llamados thread1() y thread2() . Por lo tanto, no necesitamos crear una instancia de la clase ExThread . Aquí llamamos a estos métodos usando un nombre de clase, como ExThread.thread1, ExThread.thread2. Al usar Thread a = new Thread(ExThread.thread1); la declaración, creamos e inicializamos el trabajo del subproceso a , de manera similar para el subproceso b . Mediante el uso de instrucciones a.Start();y b.Start();, los subprocesos a y b se programan para su ejecución.

Nota: La salida de estos programas puede variar debido al cambio de contexto.

Publicación traducida automáticamente

Artículo escrito por ankita_saini y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *