Sobes.tech
Junior — Middle

Potresti spiegare cos'è un semaforo e come viene usato per sincronizzare i processi?

sobes.tech AI

Risposta dell'AI

Il semaforo è un meccanismo di sincronizzazione utilizzato per gestire l'accesso a una risorsa condivisa in un ambiente multithread o multiprocesso. Contiene un contatore che indica quanti thread o processi possono accedere alla risorsa contemporaneamente.

Principio di funzionamento:

  • Inizialmente, il contatore del semaforo viene impostato sul numero di risorse disponibili.
  • Quando un thread desidera accedere, chiama l'operazione wait (o acquire), che diminuisce il contatore.
  • Se il contatore diventa inferiore a zero, il thread viene bloccato in attesa che la risorsa venga rilasciata.
  • Quando il thread rilascia la risorsa, chiama signal (o release), che aumenta il contatore e sblocca i thread in attesa.

Su iOS, per lavorare con i semafori, si utilizza spesso la classe DispatchSemaphore di GCD:

let semaphore = DispatchSemaphore(value: 1) // 1 indica che la risorsa è disponibile per un thread

// Nel thread:
semaphore.wait()   // aspetta che la risorsa sia disponibile
// Lavoro con la risorsa
semaphore.signal() // rilascia la risorsa

In questo modo, i semafori aiutano a evitare condizioni di race e garantiscono un accesso corretto alle risorse condivise.