Tengo un código multiproceso (vea la pregunta Windows API Thread Pool simple example) para el cual estoy usando un contador para identificar un hilo.InterlockedIncrement vs EnterCriticalSection/counter ++/LeaveCriticalSection
Se me ha recomendado usar un InterlockedIncrement para incrementar este contador en la función de devolución de llamada de la secuencia. Sin embargo, esto no pareció bloquear correctamente la variable, ya que encontré algunos problemas de simultaneidad. Reemplacé el InterlockedIncrement usando una sección crítica de forma manual: EnterCriticalSection/counter ++/LeaveCriticalSection y esto ahora funciona perfectamente.
¿Por qué es así? ¿No se supone que las dos opciones son estrictamente equivalentes? Tenga en cuenta que estoy hablando de lanzar solo un par (aproximadamente 10) de subprocesos.
¿De qué manera no pareció bloquear correctamente la variable? ¿Qué problemas de concurrencia encontraste? – LukeH
'InterlockedIncrement' y sus amigos no necesitan bloquear. Realice las instrucciones de montaje único. ¿Puedes ser más descriptivo sobre los problemas que estabas viendo? – Nate
LukeH: el contador no siempre daba una secuencia consecutivamente estrictamente creciente de enteros. A veces, el contador, comenzando desde 0, estaba haciendo: 0 1 2 2 4 5 ... – WhitAngl