Sobes.tech
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 (nebo acquire), 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 (nebo release), 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.