Sobes.tech
Junior — Middle

როგორ მუშაობს ბლოკირება სექვენციული რიგში sync მეთოდის გამოძახებისას?

sobes.tech AI

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

GCD (Grand Central Dispatch) ში სერიული რიგის sync მეთოდის გამოძახებისას, მიმდინარე ნაკადი ბლოკდება, სანამ sync-ს გადაცემული დავალება არ დასრულდება. თუ sync იმავე ნაკადიდან გამოიძახება, რომელიც ამ რიგს მართავს, წარმოიქმნება deadlock, რადგან რიგი ვერ დაიწყებს ახალი დავალების შესრულებას, სანამ მიმდინარე არ დასრულდება, ხოლო მიმდინარე ნაკადი ელოდება ახალი დავალების დასრულებას.

მაგალითი:

let serialQueue = DispatchQueue(label: "com.მაგალითი.serial")

serialQueue.sync {
    print("დავალების შესრულება")
}
// მიმდინარე ნაკადი ბლოკდება დავალების დასრულებამდე

მნიშვნელოვანია, არ გამოიძახოთ sync იმავე სერიულ რიგზე ამ რიგის შიგნით, რათა თავიდან აიცილოთ ურთიერთბლოკირება.