¿Son útiles las funciones Interlocked * en la memoria compartida?
-
08-07-2019 - |
Pregunta
Dos procesos de Windows tienen la memoria asignada al mismo archivo compartido. Si el archivo consta de contadores, ¿es apropiado usar las funciones Interlocked *
(como InterlockedIncrement
) para actualizar esos contadores? ¿Estos sincronizarán el acceso a través de los procesos? ¿O necesito usar algo más pesado, como un mutex? O tal vez el mecanismo de memoria compartida en sí mismo asegura vistas consistentes.
Solución
De MSDN :
...
La API enclavada
Las funciones entrelazadas proporcionan un mecanismo simple para sincronizar acceso a una variable compartida por hilos múltiples También realizan operaciones en variables en un atómico manera. Los hilos de diferentes los procesos pueden usar estas funciones si la variable está en la memoria compartida.
Entonces, sí, es seguro con su enfoque de memoria compartida.
Otros consejos
Las funciones entrelazadas están destinadas exactamente a ese tipo de uso.
De http://msdn.microsoft.com/en-us/ library / ms684122.aspx :
Los hilos de diferentes procesos pueden usar estas funciones si la variable está en la memoria compartida.
Por supuesto, si necesita tener más de un elemento actualizado atómicamente, deberá usar un mutex u otro objeto de sincronización que funcione en todos los procesos. No hay nada incorporado en el mecanismo de memoria compartida para proporcionar sincronización para acceder a la memoria compartida: deberá usar las funciones entrelazadas o un objeto de sincronización.