Sobes.tech
Junior — Middle

რა ზუსტად გადაეცემა ან გამოიყენება ბლოკირების (lock) მექანიზმში მრავალმხრივი პროგრამირების დროს?

sobes.tech AI

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

მრავალთრედული პროგრამირების (multithreading) პროცესში, ლოკის (lock) მექანიზმში გამოიყენება ობიექტი ან სინქრონიზაციის primitive, რომელიც უზრუნველყოფს ექსკლუზიურ წვდომას გაზიარებულ რესურსზე. როდესაც თრედი იღებს ლოკს, სხვა თრედები, რომლებიც ცდილობენ იგივე ლოკის მიღებას, ელოდებიან მანამ, სანამ ის არ გათავისუფლდება.

მოკლედ, "lock"-ის ქვეშ გადაეცემა ან გამოიყენება:

  • ლოკის მდგომარეობა (დაკავებული/თავისუფალი).
  • მოლოდინის მექანიზმი (მაგალითად, თრედების რიგი, რომლებიც ელოდებიან გათავისუფლებას).

C#-ში, lock საკვანძო სიტყვა მუშაობს ობიექტთან, რომელიც სერვისს წარმოადგენს ლოკის მარკერად. მაგალითი:

private readonly object _lockObj = new object();

void CriticalSection()
{
    lock(_lockObj)
    {
        // კოდი, რომელიც უნდა შესრულდეს მხოლოდ ერთ თრედთან ერთად
    }
}

აქ, lock-ში გადაეცემა რეფერენცია _lockObj ობიექტზე, რომელიც გამოიყენება წვდომის მართვისთვის. შიგნიდან, CLR იყენებს ამ ობიექტს ლოკის მდგომარეობის კონტროლისთვის.