typestar

volatile en C

volatile le dice al compilador que el valor puede cambiar a sus espaldas.

#include <signal.h>

static volatile sig_atomic_t interrupted = 0;
static volatile unsigned int *const hardware_register =
    (volatile unsigned int *) 0x1000;

void spin_until_flag(void) {
    while (!interrupted) {
    }
}

unsigned int read_twice(void) {
    unsigned int first = *hardware_register;
    unsigned int second = *hardware_register;
    return second - first;
}

Cómo funciona

  1. Sin él, un bucle que lee un flag puede optimizarse hasta desaparecer.
  2. Desactiva el cacheo en un registro, no mucho más.
  3. No sustituye a un atómico ni a un lock.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
16
Caracteres a escribir
354
Tokens
67
Ritmo de tres estrellas
105 tpm

Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 38 segundos.

Escribe este fragmento

Paso 1 de 2 en Calificadores; paso 6 de 13 en Uniones, campos de bits y comportamiento indefinido.

← Anterior Siguiente →