Sobes.tech
Junior — Middle

Jak działa blokada podczas wywoływania metody sync na kolejce sekwencyjnej?

sobes.tech AI

Odpowiedź od AI

Podczas wywoływania metody sync na kolejce seryjnej w GCD (Grand Central Dispatch), bieżący wątek jest blokowany do czasu wykonania zadania przekazanego do sync. Jeśli sync jest wywoływane z tego samego wątku, który obsługuje tę kolejkę, dochodzi do deadlocka, ponieważ kolejka nie może rozpocząć nowego zadania, dopóki obecne nie zostanie zakończone, a bieżący wątek czeka na zakończenie nowego zadania.

Przykład:

let serialQueue = DispatchQueue(label: "com.przyklad.serial")

serialQueue.sync {
    print("Wykonywanie zadania")
}
// Bieżący wątek jest zablokowany do czasu zakończenia zadania

Ważne jest, aby nie wywoływać sync na tej samej kolejce serialnej z wewnątrz zadania tej kolejki, aby uniknąć wzajemnych blokad.