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.