Junior — Middle
Mohl byste vysvětlit, co je semafor a jak se používá k synchronizaci procesů?
sobes.tech AI
Odpověď od AI
Semafor je synchronizační mechanismus používaný k řízení přístupu ke sdílenému zdroji v prostředí s více vlákny nebo více procesy. Obsahuje čítač, který ukazuje, kolik vláken nebo procesů může současně získat přístup ke zdroji.
Princip fungování:
- Nejprve je čítač semaforu nastaven na počet dostupných zdrojů.
- Když vlákno chce získat přístup, volá operaci
wait(neboacquire), která snižuje čítač. - Pokud se čítač stane menší než nula, vlákno je zablokováno a čeká na uvolnění zdroje.
- Když vlákno uvolní zdroj, volá
signal(neborelease), který čítač zvýší a odblokuje čekající vlákna.
V iOS se pro práci se semafory často používá třída DispatchSemaphore z GCD:
let semaphore = DispatchSemaphore(value: 1) // 1 znamená, že zdroj je dostupný pro jedno vlákno
// Ve vlákně:
semaphore.wait() // čeká, dokud není zdroj dostupný
// Práce se zdrojem
semaphore.signal() // uvolní zdroj
Tímto způsobem semafory pomáhají zabránit závodním podmínkám a zajišťují správný přístup ke sdíleným zdrojům.