Junior
Care este funcția cuvântului cheie lock în limbajul C#?
sobes.tech AI
Răspuns de la AI
Cuvântul cheie lock este utilizat pentru a sincroniza accesul la resurse în aplicațiile multi-thread. Asigură că doar un singur fir de execuție poate executa codul din interiorul blocului lock într-un moment dat.
Principiul de funcționare:
lockacceptă ca argument un obiect utilizat ca mutex (monitor).- Înainte de a executa codul din interiorul blocului
lock, firul de execuție încearcă să obțină o blocare exclusivă pe obiectul specificat. - Dacă blocarea este liberă, firul o obține și execută codul.
- Dacă blocarea este ocupată de alt fir, firul curent se blochează (trece în stare de așteptare) până când blocarea este eliberată.
- La ieșirea din blocul
lock(chiar și în caz de excepție), blocarea este eliberată automat.
Este folosit pentru a proteja resursele comune, cum ar fi câmpurile de clasă, colecțiile sau alte obiecte la care pot accesa mai multe fire de execuție simultan, pentru a evita condițiile de cursă și a asigura integritatea datelor.
Exemplu de utilizare:
public class SharedResource
{
private int _counter;
private readonly object _lockObject = new object(); // Obiect pentru sincronizare
public void Increment()
{
lock (_lockObject) // Acces exclusiv la blocul de cod
{
_counter++; // Modificare sigură a resursei comune
}
}
public int GetCounter()
{
lock (_lockObject) // Acces exclusiv și la citire
{
return _counter;
}
}
}
Puncte importante:
- Obiectul pentru blocare trebuie să fie de tip referință și, în general, un câmp privat (
readonly) pentru a preveni intervenția externă. - Evitați blocarea tipurilor precum
string,thissautypeof(TypeName), deoarece acestea pot fi partajate sau accesibile din exterior, ceea ce poate duce la deadlock-uri sau funcționare incorectă. lockeste un zahăr sintactic pentru utilizarea metodelor claseiMonitor.