Middle
Kas yra lock-ers C#?
sobes.tech AI
Atsakymas iš AI
C# kalboje lock naudojamas užtikrinti išskirtinį prieigą prie kodo bloko. Jis užtikrina, kad tik viena srautas gali vykdyti tą bloką vienu metu, taip išvengiant lenktynių sąlygų (race conditions) dirbant su bendrais ištekliais.
private static readonly object _lockObject = new object(); // Sinchronizacijos objektas
public void AccessSharedResource()
{
lock (_lockObject) // Objekto užrakinimas
{
// Kritinė sekcija: kodas, reikalaujantis išskirtinio prieigos
// Darbas su bendru ištekliu (pvz., kintamojo keitimas)
} // Užraktas automatiškai atlaisvinamas išeinant iš bloko
}
Alternatyvos ir susiję sąvokos:
Monitor: Teikia smulkesnę kontrolę sinchronizacijai, įskaitant Wait, Pulse, PulseAll metodus.Mutex: Naudojamas tarp procesų ir tarp gijų tame pačiame procese sinchronizacijai.Semaphore/SemaphoreSlim: Ribojamas gijų skaičius, kurios gali vienu metu pasiekti išteklių.ReaderWriterLockSlim: Leidžia kelioms gijoms skaityti vienu metu, bet tik vienai rašyti.
Svirties mechanizmo pasirinkimas priklauso nuo konkrečios sinchronizacijos užduoties. lock yra trumpesnė Monitor.Enter ir Monitor.Exit naudojimo forma ir tinka daugeliui paprastų atvejų viename procese.