Algoritmo dello struzzo
# Algoritmo dello struzzo

In informatica, l'algoritmo dello struzzo è una strategia per ignorare potenziali problemi sulla base del fatto che questi siano estremamente rari. Prende il nome dalla legenda che "lo struzzo ficchi la testa nella sabbia e finga che non ci siano problemi". Si utilizza quando risulta più conveniente consentire il verificarsi di un problema piuttosto che tentare di prevenirlo.

## Uso con i deadlock

Questo approccio può essere utilizzato nella programmazione concorrente per gestire deadlock che si ritiene siano molto rari e il cui costo per rilevarli o prevenirli sarebbe elevato. Ad esempio, se ogni PC si blocca una volta ogni 10 anni, un singolo riavvio potrebbe essere meno doloroso delle restrizioni necessarie per prevenire il blocco.

Un gruppo di processi è in stallo se ciascuno è in attesa di un evento che può essere generato solo da un altro processo del medesimo gruppo. In genere si tratta del rilascio di una risorsa, quindi nessuno dei processi può continuare l'esecuzione, rilasciare risorse ed essere attivato.

L'algoritmo dello struzzo finge che non ci siano problemi ed è ragionevole usarlo se i deadlock si verificano molto raramente e il costo per prevenirli sarebbe elevato. I sistemi operativi multitasking generalmente adottano questo approccio.

Sebbene l'utilizzo dell'algoritmo dello struzzo sia uno dei metodi per affrontare i deadlock, esistono altri metodi efficaci come la prevenzione dinamica, l'algoritmo del banchiere, il rilevamento e il ripristino.

## Compromessi

Nonostante l'efficienza, l'algoritmo dello struzzo baratta la correttezza per la comodità. Tuttavia, poiché l'algoritmo si occupa direttamente di casi estremi, non è un grande compromesso. Infatti, il metodo più semplice e utilizzato per risolvere un deadlock è il riavvio.

Alcuni algoritmi con scarse prestazioni nel caso peggiore, sono comunemente usati perché risultano poco efficienti solo su casi artificiali che non si verificano nella pratica; esempi tipici sono l'algoritmo del simplesso e l'algoritmo di inferenza del tipo per Standard ML. Problemi come l'overflow di interi nei linguaggi con interi a larghezza fissa vengono anch'essi spesso ignorati perché si verificano solo in casi eccezionali che non emergono con input pratici.

