En C#, multithreading permite ejecutar múltiples hilos de ejecución simultáneamente, lo que puede mejorar la eficiencia y la capacidad de respuesta de una aplicación. A continuación, te mostraré cómo trabajar con hilos y procesos concurrentes en C#.
Creación de Hilos (Threads)
Puedes crear hilos en C# utilizando la clase `Thread` del espacio de nombres `System.Threading`.
using System;
using System.Threading;
class Program
{
static void Main(string[] args)
{
// Crear un nuevo hilo y asignarle un método para ejecutar
Thread hilo = new Thread(NuevoMetodo);
// Iniciar la ejecución del hilo
hilo.Start();
Console.WriteLine("Hilo principal: Esperando que el otro hilo finalice.");
// Esperar a que el otro hilo finalice
hilo.Join();
Console.WriteLine("Hilo principal: El otro hilo ha finalizado.");
}
static void NuevoMetodo()
{
Console.WriteLine("Nuevo hilo: Este es un nuevo hilo de ejecución.");
}
}
Multithreading Concurrente
A continuación, te muestro un ejemplo donde se ejecutan múltiples hilos concurrentemente:
using System;
using System.Threading;
class Program
{
static void Main(string[] args)
{
for (int i = 1; i <= 5; i++)
{
int numeroHilo = i;
Thread hilo = new Thread(() => MostrarMensaje(numeroHilo));
hilo.Start();
}
}
static void MostrarMensaje(int numeroHilo)
{
Console.WriteLine("Hilo " + numeroHilo + ": Este es un nuevo hilo de ejecución.");
}
}
Sincronización de Hilos
Es importante asegurar la sincronización adecuada entre hilos para evitar condiciones de carrera y otros problemas de concurrencia. Puedes usar constructores como `lock` o `Monitor` para lograr esto.
using System;
using System.Threading;
class Program
{
private static readonly object _lock = new object();
static void Main(string[] args)
{
for (int i = 1; i <= 5; i++)
{
int numeroHilo = i;
Thread hilo = new Thread(() => MostrarMensaje(numeroHilo));
hilo.Start();
}
}
static void MostrarMensaje(int numeroHilo)
{
lock (_lock)
{
Console.WriteLine("Hilo " + numeroHilo + ": Este es un nuevo hilo de ejecución.");
}
}
}
El uso adecuado de sincronización es fundamental para garantizar un comportamiento correcto y predecible cuando se trabaja con hilos y procesos concurrentes.