Hilo principal en C# – Part 1

C# proporciona compatibilidad integrada para la programación multiproceso. Un programa de subprocesos múltiples contiene dos o más partes que pueden ejecutarse simultáneamente. Cada parte de un programa de este tipo se denomina subproceso , y cada subproceso define una ruta de ejecución separada.

Hilo principal

Cuando se inicia un programa C#, un subproceso comienza a ejecutarse inmediatamente. Esto generalmente se llama el hilo principal de nuestro programa.

Propiedades:

  • Es el subproceso bajo el cual se crearán otros subprocesos «secundarios» .
  • A menudo, debe ser el último subproceso en finalizar la ejecución porque realiza varias acciones de apagado.

Ejemplo:

// C# program to illustrate the working
//  of main thread and child thread
using System;
using System.Threading;
  
public class GFG {
  
    // Main thread
    static public void Main()
    {
        Console.WriteLine("Welcome to the Main thread");
  
        // Child threads
        Thread thrA = new Thread(childthread);
        Thread thrB = new Thread(childthread);
        thrA.Start();
        thrB.Start();
    }
  
    public static void childthread()
    {
        Console.WriteLine("Welcome to the Child thread");
    }
}

Producción:

Welcome to the Main thread
Welcome to the Child thread
Welcome to the Child thread

Explicación: El programa anterior consta de un solo subproceso que se conoce como el subproceso principal . El subproceso principal funciona como cualquier otro subproceso, pero se inicia automáticamente, no es necesario que requiera ningún Start()método para iniciar la ejecución del subproceso principal. Tanto thrA como thrB son el subproceso secundario del subproceso principal. El primer subproceso principal comienza a funcionar después de que el subproceso secundario comience a funcionar.

¿Cómo acceder al hilo principal?

Para acceder al subproceso principal, necesita el objeto de clase Subproceso para consultarlo. Puede crear esto usando la propiedad CurrentThread de la clase Thread. Devolverá la referencia al hilo en el que se utilizó. Entonces, cuando usa la propiedad CurrentThread dentro del hilo principal, obtendrá la referencia del hilo principal. Después de eso, obtendrá el control sobre el hilo principal como cualquier otro hilo.

Ejemplo:

// C# program to illustrate
// how to access main thread
using System;
using System.Threading;
  
public class GFG {
  
    // Main Method
    static public void Main()
    {
        Thread thr;
  
        // Get the reference of main Thread
        // Using CurrentThread property
        thr = Thread.CurrentThread;
  
        // Display the name of 
        // the main Thread
        if (thr.Name == null) {
  
            Console.WriteLine("Main thread does not have name");
        }
  
        else {
  
            Console.WriteLine("The name of main "+
                      "thread is: {0}", thr.Name);
        }
  
        Console.WriteLine();
  
        // Display the priority of main thread
        Console.WriteLine("The priority of main"+
                " thread is: {0}", thr.Priority);
  
        // Set the name of main thread
        thr.Name = "Main Thread";
        Console.WriteLine();
  
        // Display the name of main thread
        Console.WriteLine("The name of main "+
                  "thread is: {0}", thr.Name);
    }
}

Producción:

Main thread does not have name

The priority of main thread is: Normal

The name of main thread is: Main Thread
Interbloqueo mediante el uso de subproceso principal

Podemos crear un interbloqueo simplemente usando el subproceso principal, es decir, usando solo un subproceso. El siguiente programa C# demuestra esto.

Ejemplo:

// C# program to demonstrate deadlock
// using the Main thread
using System;
using System.Threading;
  
public class GFG {
  
    // Main Method
    public static void Main()
    {
  
        try {
  
            Console.WriteLine("Enter into DEADLOCK!!");
  
            Thread.CurrentThread.Join();
  
            // the following statement
            // will never execute
            Console.WriteLine("This statement will never execute");
        }
  
        catch (ThreadInterruptedException e) {
            e.ToString();
        }
    }
}

Producción:

Enter into DEADLOCK!!

Error de tiempo de ejecución:

Se excedió el límite máximo de tiempo real debido a una gran carga en el servidor o al usar la función de suspensión

Explicación: La declaración » Thread.currentThread().join()«, le dirá al subproceso principal que espere a que este subproceso (es decir, se espere a sí mismo ) muera. Por lo tanto, el subproceso principal espera a que muera, lo que no es más que un punto muerto.

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 *