b'\n_START_ARTICLE_\nBusy-waiting\n_START_PARAGRAPH_\nBusy-waiting, busy-looping eller spinning \xc3\xa4r en teknik d\xc3\xa4r en process upprepade g\xc3\xa5nger kontrollerar om ett tillst\xc3\xa5nd g\xc3\xa4ller, exempelvis om en tangentbordsinmatning eller ett datorl\xc3\xa5s finns tillg\xc3\xa4ngligt. Spinning kan \xc3\xa4ven anv\xc3\xa4ndas f\xc3\xb6r att generera en godtycklig f\xc3\xb6rdr\xc3\xb6jning, en teknik som var n\xc3\xb6dv\xc3\xa4ndig p\xc3\xa5 system som saknade en metod f\xc3\xb6r att v\xc3\xa4nta en specifik tidsl\xc3\xa4ngd.  Processorhastigheter varierar kraftigt mellan datorer, speciellt d\xc3\xa5 en del processorer \xc3\xa4r utformade f\xc3\xb6r att dynamiskt justera  hastigheten baserat p\xc3\xa5 externa faktorer, som exempelvis belastningen p\xc3\xa5 operativsystemet.  D\xc3\xa4rf\xc3\xb6r kan spinning som en tidsf\xc3\xb6rdr\xc3\xb6jningsteknik ofta producera of\xc3\xb6ruts\xc3\xa4gbara eller t.o.m. inkonsistenta resultat s\xc3\xa5vida koden \xc3\xa4r implementerad f\xc3\xb6r att best\xc3\xa4mma hur snabbt processorn kan k\xc3\xb6ra en tom loop, eller om loopkoden kollar en realtidsklocka._NEWLINE_Spinning kan vara en bra strategi i vissa f\xc3\xb6rh\xc3\xa5llanden, i synnerhet f\xc3\xb6r implementationen av spinlock inom operativsystem som \xc3\xa4r byggda att k\xc3\xb6ras p\xc3\xa5 SMP-system.  I allm\xc3\xa4nhet ses spinning som ett antim\xc3\xb6nster och b\xc3\xb6r undvikas d\xc3\xa5 processortiden skulle kunna anv\xc3\xa4ndas f\xc3\xb6r att utf\xc3\xb6ra en annan uppgift ist\xc3\xa4llet f\xc3\xb6r att sl\xc3\xb6sa p\xc3\xa5 den p\xc3\xa5 en meningsl\xc3\xb6s aktivitet.\n_START_SECTION_\nExempel i C\n_START_PARAGRAPH_\nF\xc3\xb6ljande kod skriven i C illustrerar tv\xc3\xa5 tr\xc3\xa5dar som delar ett globalt heltal i.  Den f\xc3\xb6rsta tr\xc3\xa5den anv\xc3\xa4nder busy-waiting f\xc3\xb6r att kolla efter en \xc3\xa4ndring i v\xc3\xa4rdet f\xc3\xb6r i:_NEWLINE_#include <stdio.h>#include <pthread.h>#include <unistd.h>#include <stdlib.h>_NEWLINE_ _NEWLINE_volatile int i = 0; /* i \xc3\xa4r global, s\xc3\xa5 den \xc3\xa4r synlig f\xc3\xb6r alla funktioner.                       Den \xc3\xa4r \xc3\xa4ven volatile, eftersom den                       kanske \xc3\xa4ndras p\xc3\xa5 ett s\xc3\xa4tt som kompilatorn inte kan f\xc3\xb6rutsp\xc3\xa5,                       h\xc3\xa4r ifr\xc3\xa5n en annan tr\xc3\xa5d. */_NEWLINE_ _NEWLINE_/* f1 anv\xc3\xa4nder ett spinlock f\xc3\xb6r att v\xc3\xa4nta p\xc3\xa5 i att ska \xc3\xa4ndras fr\xc3\xa5n 0. */static void *f1(void *p){_NEWLINE_    while (i==0) {_NEWLINE_        /* g\xc3\xb6r ingenting - forts\xc3\xa4tt v\xc3\xa4nta om och om igen */_NEWLINE_    } _NEWLINE_    printf("i\'s value has changed to %d.\\n", i);_NEWLINE_    return NULL;}static void *f2(void *p){_NEWLINE_    sleep(60);   /* vila i 60 sekunder */_NEWLINE_    i = 99;_NEWLINE_    printf("t2 has changed the value of i to %d.\\n", i);_NEWLINE_    return NULL;}int main(){_NEWLINE_    int rc;_NEWLINE_    pthread_t t1, t2;_NEWLINE__NEWLINE_    rc = pthread_create(&t1, NULL, f1, NULL);_NEWLINE_    if (rc != 0) {_NEWLINE_        fprintf(stderr,"pthread f1 failed\\n");_NEWLINE_        return EXIT_FAILURE;_NEWLINE_    }_NEWLINE_ _NEWLINE_    rc = pthread_create(&t2, NULL, f2, NULL);_NEWLINE_    if (rc != 0) {_NEWLINE_        fprintf(stderr,"pthread f2 failed\\n");_NEWLINE_        return EXIT_FAILURE;_NEWLINE_    }_NEWLINE_ _NEWLINE_    pthread_join(t1, NULL);_NEWLINE_    pthread_join(t2, NULL);_NEWLINE_    puts("All pthreads finished.");_NEWLINE_    return 0;}_NEWLINE_I ett fall som detta kan C11:s condition variable anv\xc3\xa4ndas ist\xc3\xa4llet.'