Acceso a variables interbloqueadas
Las aplicaciones deben sincronizar el acceso a variables compartidas por varios subprocesos. Las aplicaciones también deben asegurarse de que las operaciones de estas variables se realizan de forma atómica (se realizan en su totalidad o no en absoluto).
Las lecturas y escrituras simples en variables de 32 bits alineadas correctamente son operaciones atómicas. En otras palabras, no terminará con una sola parte de la variable actualizada; todos los bits se actualizan de forma atómica. Sin embargo, no se garantiza que el acceso se sincronice. Si dos subprocesos leen y escriben desde la misma variable, no puede determinar si un subproceso realizará su operación de lectura antes de que el otro realice su operación de escritura.
Las lecturas y escrituras simples para las variables de 64 bits alineadas correctamente son atómicas en Windows de 64 bits. No se garantiza que las lecturas y escrituras en valores de 64 bits sean atómicas en Windows de 32 bits. No se garantiza que las lecturas y escrituras en variables de otros tamaños sean atómicas en ninguna plataforma.
Api interbloqueada
Las funciones interbloqueadas proporcionan un mecanismo sencillo para sincronizar el acceso a una variable compartida por varios subprocesos. También realizan operaciones en variables de forma atómica. Los subprocesos de diferentes procesos pueden usar estas funciones si la variable está en memoria compartida.
Las funciones InterlockedIncrement y InterlockedDecrement combinan los pasos necesarios para incrementar o disminuir una variable en una operación atómica. Esta característica es útil en un sistema operativo multitarea, en el que el sistema puede interrumpir la ejecución de un subproceso para conceder un segmento de tiempo de procesador a otro subproceso. Sin esta sincronización, dos subprocesos podrían leer el mismo valor, incrementarlo en 1 y almacenar el nuevo valor para un aumento total de 1 en lugar de 2. Las funciones de acceso a variables interbloqueadas protegen contra este tipo de error.
ElinterbloqueoInterlockedExchangePointer y funciones interlockedExchangePointer intercambian de forma atómica los valores de las variables especificadas. La función InterlockedExchangeAdd combina dos operaciones: agregar dos variables juntas y almacenar el resultado en una de las variables.
El InterlockedCompareExchange, InterlockedCompare64Exchange128y interlockedCompareExchangePointer funciones combinan dos operaciones: comparar dos valores y almacenar un tercer valor en una de las variables, en función del resultado de la comparación.
Las InterlockedAnd, InterlockedOry funciones interbloqueadas de realizan de forma atómica las operaciones AND, OR y XOR, respectivamente.
Hay funciones diseñadas específicamente para realizar el acceso a variables interbloqueadas en valores y direcciones de memoria de 64 bits y están optimizados para su uso en Windows de 64 bits. Cada una de estas funciones contiene "64" en el nombre; por ejemplo, interlockedDecrement64 y InterlockedCompareExchangeAcquire64.
La mayoría de las funciones interbloqueadas proporcionan barreras de memoria completas en todas las plataformas windows. También hay funciones que combinan las operaciones básicas de acceso a variables interbloqueadas con la semántica de ordenación de memoria de adquisición y liberación compatibles con determinados procesadores. Cada una de estas funciones contiene la palabra "Acquire" o "Release" en sus nombres; por ejemplo, interlockedDecrementAcquire y InterlockedDecrementRelease. Adquirir semántica de memoria especifica que la operación de memoria que realiza el subproceso actual estará visible antes de que se intenten realizar otras operaciones de memoria. La semántica de memoria de versión especifica que la operación de memoria que realiza el subproceso actual será visible después de que se hayan completado todas las demás operaciones de memoria. Esta semántica permite forzar que las operaciones de memoria se realicen en un orden específico. Use la semántica de adquisición al escribir una región protegida y liberar la semántica al salir de ella.
Temas relacionados