Mai multe fire de execuție — RexDac Academy

RexDac AcademyNote tehnice · Ajută să ai câteva noțiuni de bază
0%Note publicate citite · pe acest dispozitiv

Nivelul 3 — Funcții

Mai multe fire de execuție

Note originale de SunDiaL · Vezi sursa în engleză

După cum sugerează numele, multithreading înseamnă folosirea mai multor fire de execuție într-un program.

Când scrii programe cu mai multe fire de execuție, trebuie să fii atent la accesul concurent. Acesta apare când două fire accesează aceeași variabilă în același timp.

Poți evita problemele de concurență folosind cuvântul-cheie lock. Acesta blochează o resursă (o variabilă), astfel încât celelalte fire care încearcă să o acceseze să aștepte până când primul fir își termină lucrul.

Exemplu:

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.
}

Blocarea are o problemă importantă: Thread1 poate aștepta după Thread2, în timp ce Thread2 așteaptă după Thread1. Acest lucru se numește interblocare.