Middle
Čo sa stane, ak vykonáte synchronizovaný volanie na seba v hlavnom vlákne a prečo to povedie k vzájomnému zablokovaniu?
sobes.tech AI
Odpoveď od AI
Ak v hlavnom vlákne (main thread) iOS aplikácie vykonáte synchronné volanie na seba samého, napríklad cez DispatchQueue.main.sync, dôjde k vzájomnému zablokovaniu (deadlock).
Prečo sa to deje:
- Hlavné vlákno je už obsadené vykonávaním aktuálneho kódu.
- Pri synchronnom volaní sa pokúša spustiť blok kódu, ktorý má byť zaradený do fronty hlavného vlákna.
- Ale hlavné vlákno nemôže tento blok spracovať, kým nedokončí aktuálny kód, a aktuálny kód čaká na dokončenie synchronného volania.
Výsledkom je situácia, kedy vlákno čaká samo na seba, a vykonávanie sa zastaví navždy.
Príklad v Swift:
DispatchQueue.main.sync {
// Tento kód sa pokúša synchronne spustiť na hlavnom vlákne,
// ale ak volanie prichádza z hlavného vlákna, vznikne deadlock
}