- Espera activa
-
Espera activa
En Informática, se denomina espera activa a una técnica donde un proceso repetidamente verifica una condición, tal como esperar una entrada de teclado o si el ingreso a una sección crítica está habilitado. Puede ser una estrategia válida en algunas circunstancias especiales, sobre todo en la sincronización de procesos en los sistemas con múltiples procesadores (SMP). En general, debe ser evitada, ya que consume tiempo de CPU sin realizar ninguna operación.
Ejemplo en Código C
Este código muestra dos threads (hilos) que comparten la variable global entera i. El primer thread usa espera activa para chequear un cambio en el valor de i.
#include <stdio.h> #include <pthread.h> #include <unistd.h> volatile int i; /* i es global, por lo que es visible para todas las funciones. También está marcada como volatile, porque cambiará de forma que no es predecible por el compilador (en este caso: por un hilo diferente.) */ /* t1 usa un spinlock para esperar hasta que i deje de valer 0 */ static void *f1() { while (i==0) { /* no hacer nada - sólo seguir comprobando una y otra vez */ } printf("i's value has changed to %d.\n", i); return; } static void *f2() { sleep(60); /* dormir 60 segundos. */ i = 99; printf("t2 changing the value of i to %d.\n", i); return; } int main() { int x; pthread_t t1, t2; i = 0; /* set global int i to 0. */ x = pthread_create(&t1, NULL, f1, NULL); if (x != 0) { printf("pthread foo failed.\n"); } x = pthread_create(&t2, NULL, f2, NULL); if (x != 0) { printf("pthread bar failed.\n"); } pthread_join(t1, NULL); pthread_join(t2, NULL); printf("all pthreads finished.\n"); return 0; }
En un sistema UNIX, puede compilar este código con este comando:
$ cc spinlock.c -lpthread
En Linux, reemplace el compilador cc con el compilador gcc.
Categoría: Antipatrón de diseño
Wikimedia foundation. 2010.