Junior
რა ფუნქცია აქვს lock საკვანძო სიტყვას C# ენაში?
sobes.tech AI
პასუხი AI-სგან
საკვანძო სიტყვა lock გამოიყენება მრავალთხრიან პროგრამებში რესურსების სინქრონიზაციისთვის. ის გარანტირებს, რომ მხოლოდ ერთი ნაკადი შეუძლია შეასრულოს lock ბლოკის კოდი კონკრეტულ მომენტში:
სამუშაო პრინციპი:
lockიღებს არგუმენტად ობიექტს, რომელიც გამოიყენება მუტექსის (მონიტორის) სახით.lockბლოკის კოდის შესრულებამდე, ნაკადი ცდილობს მიიღოს მითითებულ ობიექტზე მონოპოლური ბლოკირება.- თუ ბლოკირება თავისუფალია, ნაკადი იღებს მას და ასრულებს კოდს.
- თუ ბლოკირება დაკავებულია სხვა ნაკადის მიერ, მიმდინარე ნაკადი ბლოკირდება (გადადის მოლოდინის მდგომარეობაში), სანამ ბლოკირება არ გათავისუფლდება.
lockბლოკიდან გამოსვლის შემდეგ (მათ შორის გამონაკლისის შემთხვევაშიც), ბლოკირება ავტომატურად გათავისუფლებულია.
ეს გამოიყენება საერთო რესურსების დაცვისთვის, როგორიცაა კლასის ველები, კოლექციები ან სხვა ობიექტები, რომელთაც ერთდროულად მიმართავენ რამდენიმე ნაკადი, რათა თავიდან აიცილონ რბოლის პირობები (race conditions) და უზრუნველყონ მონაცემების მთლიანობა:
გამოყენების მაგალითი:
public class SharedResource
{
private int _counter;
private readonly object _lockObject = new object(); // სინქრონიზაციის ობიექტი
public void Increment()
{
lock (_lockObject) // ერთდროულად წვდომა კოდის ბლოკზე
{
_counter++; // უსაფრთხო საერთო რესურსის ცვლილება
}
}
public int GetCounter()
{
lock (_lockObject) // წაკითხვის დროსაც ერთდროულად წვდომა
{
return _counter;
}
}
}
მნიშვნელოვანი წერტილები:
- ბლოკირების ობიექტი უნდა იყოს რეფერენციული ტიპის და ჩვეულებრივ, პირადი ველი (
readonly), რათა თავიდან აიცილოს გარედან ჩარევა. - თავიდან აიცილეთ
string,this, ანtypeof(TypeName)ტიპების გამოყენება, რადგან ისინი შეიძლება იყოს ერთობლივად გამოყენებული ან ხელმისაწვდომი გარედან, რაც შეიძლება გამოიწვიოს ურთიერთბლოკირებები (deadlocks) ან არასწორი მუშაობა. lockარის სინტაქსური შაქარიMonitorკლასის მეთოდების გამოყენებისთვის.