Programación multihilo — RexDac Academy

RexDac AcademyNotas técnicas · Ayuda tener algunos conocimientos previos
0%Notas publicadas leídas · en este dispositivo

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.