Red de conocimiento informático - Programación de la red - Por favor dígame cómo implementar la operación de incremento automático atómico en Linux

Por favor dígame cómo implementar la operación de incremento automático atómico en Linux

El archivo de definición para operaciones atómicas de arquitectura x86 en el código fuente de Linux es.

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

*

* 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.