Espera activa

En programació, espera activa (o busy waiting) és una tècnica en la qual un procés o un fil d'execució comprova repetidament si una condició és certa, per exemple, per saber si l'accés a una secció crítica està habilitat.

L'espera activa consumeix temps de CPU sense realitzar cap operació, i per tant ha de ser emprada amb cura. Una aplicació comuna és la implementació de spinlocks en els sistemes operatius dissenyats per funcionar en sistemes multiprocessador (SMP).

Hi ha diverses alternatives a l'ús d'esperes actives. La majoria de sistemes operatius proveeixen crides de sistema que permeten bloquejar un procés en un event, com l'adquisició d'un semàfor, un rellotge de sistema, la disponibilitat d'un dispositiu d'entrada/sortida (I/O), etc., essent així innecessari realitzar espera activa. El planificador (scheduler) del sistema operatiu suspèn el procés i permet que la CPU sigui utilitzada per altres processos.

Si és absolutament necessari realitzar una espera, es pot fer ús de funcions d'espera (delay) que són crides de sistema disponibles en la majoria de sistemes operatius. Aquestes funcions suspenen temporalment el procés o el fil d'execució que s'estava processant, i per tant no s'utilitzarà temps de CPU mentre duri la suspensió. Malgrat tot, en certs casos les esperes actives desitjables. Per exemple, en la implementació de controladors de baix nivell per a maquinari, on no és pràctic utilitzar senyalització mitjançant interrupcions. A vegades les esperes són de fet la forma més ràpida d'accedir a certes dades. Per exemple, pot ser necessari escriure dades de control a un dispositiu i llavors llegir algunes dades d'aquest que no són valides fins al cap de diversos cicles de rellotge. Si per exemple cridem una funció de sistema per retardar la lectura, pot ser que el temps involucrat en execució sigui molt major que el temps que volem estar esperant (degut a la sobrecàrrega involucrada en la crida a aquesta funció).