Nivel 3 — Funciones
Programación multihilo
Notas originales de SunDiaL · Ver fuente en inglés
Como su nombre indica, la programación multihilo consiste en utilizar varios hilos en un programa.
Al escribir programas multihilo, hay que tener cuidado con el acceso concurrente. Esto significa que dos hilos acceden a la misma variable al mismo tiempo.
Puedes evitar problemas de concurrencia mediante la palabra clave lock. Esta bloquea un recurso, como una variable, de modo que los demás hilos que intenten acceder a él tengan que esperar hasta que el primer hilo termine su trabajo.
Ejemplo:
int x = 0;
void Add1()
{
//any object can be locked, really
//usually a dedicated "lock" object is created
lock(x)
{
x = x + 1;
}
}
void Main()
{
Thread myThread1 = new Thread(new ThreadStart(Add1));
Thread myThread2 = new Thread(new ThreadStart(Add1));
myThread1.Start();
myThread2.Start();
//x will be 2 here.
}
Hay un gran problema con los bloqueos: cuando Thread1 espera a Thread2 y Thread2 espera a Thread1. Esto se conoce como interbloqueo.