Junior — Middle
როგორ მართავენ სისტემები სიტუაციას, როდესაც რამდენიმე ნაკადი ერთდროულად მიმართავს საერთო ცვლადს ან მდგომარეობას?
sobes.tech AI
პასუხი AI-სგან
როდესაც რამდენიმე ნაკადი ერთდროულად მიმართავს საერთო ცვლადს ან მდგომარეობას, წარმოიქმნება რბოლა (race condition). იმისათვის, რომ თავიდან აიცილოთ არასწორი მონაცემები და უზრუნველყოთ სისწორე, გამოიყენება სინქრონიზაციის მექანიზმები:
- ლოკები (lock, mutex) — აძლევენ ერთ ნაკადს ექსკლუზიურ უფლებას რესურსზე, სხვა ელოდება.
- მონიტორები (Monitor.Enter/Exit C#-ში) — უფრო მოქნილი ბლოკირების მექანიზმი.
- C#-ში
lockსაკვანძო სიტყვა — გამარტივებული სინტაქსი მონიტორებისთვის. - ატომური ოპერაციები (Interlocked) — მარტივი ოპერაციებისათვის, სრული ბლოკირების გარეშე.
- კონკურენტ კოლექციები — ნაკადების უსაფრთხო მონაცემთა სტრუქტურები.
მაგალითი lock-ის გამოყენებით C#-ში:
private readonly object _sync = new object();
private int _counter = 0;
public void Increment()
{
lock(_sync)
{
_counter++;
}
}
ეს მიდგომა გარანტიას იძლევა, რომ მხოლოდ ერთი ნაკადი შეცვლის ცვლადს ერთდროულად.