Por favor dígame cómo implementar la operación de incremento automático atómico en Linux
Linux 2.6/include/ASM-i386/atomic .
Atomic_t está definido en el archivo, que tiene un solo campo contador, utilizado para almacenar datos de 32 bits.
typedef struct { volatile int counter;} atomic _ t;
Atomic_inc, función de operación atómica, completa operaciones atómicas de aumento automático.
/**
* atomic_inc - Incrementar variable atómica
* @ v:Puntero de tipo atómico _ t
* p>
* incrementa automáticamente @v en 1.
*/
estático _ _ en línea _ _ vacío atómico _ Inc(atómico _ t * v)
{
_ _ asm _ _ _ _ volátil _ _(
Bloqueo "contiene %0"
:" = m "(v-& gt; contador)
: "m"(v-> contador));
}
donde se define la macro de bloqueo.
#ifdef CONFIG_SMP
#Definir bloqueo "bloqueo;"
#De lo contrario
#Definir bloqueo""
#endif
Se puede ver que en el caso de una arquitectura multiprocesador simétrica, LOCK se interpreta como un bloqueo de prefijo de instrucción. Para arquitecturas monoprocesador, LOCK no contiene nada.