Sobes.tech
Junior — Middle

შეგიძლიათ ახსნათ, რა არის სემაფორი და როგორ გამოიყენება რესურსებზე წვდომის კონტროლისთვის?

sobes.tech AI

პასუხი AI-სგან

სემაფორი არის სინქრონიზაციის მექანიზმი, რომელიც გამოიყენება საერთო რესურსზე წვდომის კონტროლისთვის მრავალთრედული პროგრამებში. მას აქვს გამოთვლილი, რომელიც აჩვენებს, რამდენი თრედი შეუძლია ერთდროულად მიიღოს წვდომა რესურსზე.

მუშაობის პრინციპი:

  • თავდაპირველად, გამოთვლილი მითითებულია ხელმისაწვდომი რესურსების რაოდენობაზე (მაგალითად, 3).
  • როდესაც თრედი სურს წვდომა, ის იძახის ოპერაციას Wait (ან WaitOne C#-ში), რომელიც ამცირებს გამოთვლილს 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();
        }
    }
}

ამ გზით, სემაფორი საზღვარს აყენებს ერთდროულად რესურსთან მუშაობა მცირერიცხოვან თრედებს შორის, თავიდან აცილებს შეჯახებებს და უზრუნველყოფს სწორი მუშაობა.