Junior — Middle
In quali situazioni è opportuno utilizzare il meccanismo Semaphore per la sincronizzazione dei thread?
sobes.tech AI
Risposta dell'AI
Il meccanismo Semaphore (semaforo) viene utilizzato per limitare il numero di thread che accedono contemporaneamente a una risorsa o a una sezione critica.
È consigliabile usare un semaforo quando:
- È necessario limitare il numero di operazioni simultanee, ad esempio, l'accesso a un pool di connessioni o a un numero limitato di file.
- È necessario controllare il parallelismo per evitare sovraccarichi del sistema.
- È richiesta sincronizzazione tra thread, quando più thread devono attendere che una risorsa venga liberata.
In iOS, i semafori sono spesso usati per gestire attività asincrone, ad esempio, per attendere il completamento di più operazioni o limitare il numero di attività eseguite contemporaneamente.
Esempio di utilizzo di DispatchSemaphore in Swift:
let semaphore = DispatchSemaphore(value: 3) // massimo 3 thread contemporanei
func accessResource() {
semaphore.wait() // decrementa il contatore, se è 0, il thread si blocca
// Lavoro con la risorsa
print("Thread ha accesso")
sleep(1) // simulazione di lavoro
semaphore.signal() // incrementa il contatore, liberando spazio
}
for _ in 1...10 {
DispatchQueue.global().async {
accessResource()
}
}
In questo esempio, non più di 3 thread potranno lavorare con la risorsa contemporaneamente.