Junior — Middle
შეგიძლიათ ახსნათ, რა არის სემაფორი და როგორ გამოიყენება რესურსებზე წვდომის კონტროლისთვის?
sobes.tech AI
პასუხი AI-სგან
სემაფორი არის სინქრონიზაციის მექანიზმი, რომელიც გამოიყენება საერთო რესურსზე წვდომის კონტროლისთვის მრავალთრედული პროგრამებში. მას აქვს გამოთვლილი, რომელიც აჩვენებს, რამდენი თრედი შეუძლია ერთდროულად მიიღოს წვდომა რესურსზე.
მუშაობის პრინციპი:
- თავდაპირველად, გამოთვლილი მითითებულია ხელმისაწვდომი რესურსების რაოდენობაზე (მაგალითად, 3).
- როდესაც თრედი სურს წვდომა, ის იძახის ოპერაციას
Wait(ანWaitOneC#-ში), რომელიც ამცირებს გამოთვლილს 1-ით. - თუ გამოთვლილი ხდება ნული ან ნაკლები, თრედი ბლოკირებულია და ელოდება, სანამ რესურსი არ გათავისუფლდება.
- როდესაც თრედი რესურსს გათავისუფლებს, ის იძახის
Release, რომელიც ზრდის გამოთვლილს და ხსნის ელოდებარე თრედებს.
C# მაგალითი:
using System;
using System.Threading;
class Program
{
static Semaphore semaphore = new Semaphore(3, 3); // მაქსიმუმ 3 თრედი ერთდროულად
static void AccessResource(int id)
{
Console.WriteLine($"თრედი {id} ელოდება წვდომას");
semaphore.WaitOne(); // წვდომის მოთხოვნა
Console.WriteLine($"თრედი {id} მიიღო წვდომა");
Thread.Sleep(1000); // სამუშაო რესურსთან
Console.WriteLine($"თრედი {id} გათავისუფლებს რესურსს");
semaphore.Release(); // რესურსის გათავისუფლება
}
static void Main()
{
for (int i = 1; i <= 5; i++)
{
int localId = i;
new Thread(() => AccessResource(localId)).Start();
}
}
}
ამ გზით, სემაფორი საზღვარს აყენებს ერთდროულად რესურსთან მუშაობა მცირერიცხოვან თრედებს შორის, თავიდან აცილებს შეჯახებებს და უზრუნველყოფს სწორი მუშაობა.