Middle
Lock-ерҳо дар C# чистанд?
sobes.tech AI
Ҷавоб аз AI
C#-да lock истифода мешавад, барои таъмини дастрасии истисноӣ ба блоки коди. Он кафолат медиҳад, ки танҳо як ҷараён метавонад ҳамзамон ин блокро иҷро кунад, пешгирӣ кардани ҳолатҳои рақобат (race conditions) ҳангоми кор бо захираҳои умумӣ.
private static readonly object _lockObject = new object(); // Объекти барои ҳамоҳангсозӣ
public void AccessSharedResource()
{
lock (_lockObject) // бастани объект
{
// Боби танқидӣ: код, ки талаб мекунад дастрасии истисноӣ
// Кор бо захираи умумӣ (масалан, тағир додани тағирёбанда)
} // Бастани автоматӣ ҳангоми хориҷ шудан аз блок
}
Альтернативаҳо ва мафҳумҳои вобаста:
Monitor: Назоратро бо назорати бештар дар бораи ҳамоҳангсозӣ таъмин мекунад, аз ҷумла методҳо Wait, Pulse, PulseAll.Mutex: барои ҳамоҳангсозӣ байни равандҳо ва инчунин байни ҷараёнҳо дар як раванд истифода мешавад.Semaphore/SemaphoreSlim: шумораи ҷараёнҳоро маҳдуд мекунад, ки метавонанд ҳамзамон ба захира дастрасӣ пайдо кунанд.ReaderWriterLockSlim: имкон медиҳад, ки бисёре аз ҷараёнҳо ба таври ҳамзамон хонанд, аммо танҳо яке метавонад нависад.
Интихоби механизми бастани кобилияти вобаста ба вазифаи махсуси ҳамоҳангсозӣ аст. lock шакли кӯтоҳшудаи истифодаи Monitor.Enter ва Monitor.Exit мебошад ва барои бештар ҳолатҳои оддӣ дар дохили як раванд мувофиқ аст.