Concurrencia: condiciones de carrera y competencia de datos


         No todas las condiciones de carrera son competencias de datos, y no todas las competencias de datos son condiciones de carrera, pero ambas pueden hacer que los programas concurrentes fallen.

1. Condiciones de carrera

        Cuando la exactitud del cálculo depende del tiempo de ejecución alternativo de varios subprocesos, se producirán condiciones de carrera.

        Como la mayoría de los errores de concurrencia, las condiciones de carrera no siempre causan problemas y también se requiere un tiempo de ejecución inadecuado.

Las condiciones de carrera más comunes son:

  1. Detectar antes de la ejecución : la ejecución depende del resultado de la detección, y el resultado de la detección depende del tiempo de ejecución de varios subprocesos, y el tiempo de ejecución de varios subprocesos generalmente no es fijo y no se puede juzgar, lo que conduce a varios problemas en el resultado de la ejecución.

        En la memoria o el almacenamiento de la computadora, pueden ocurrir condiciones de carrera cuando se emiten instrucciones para leer y escribir una gran cantidad de datos al mismo tiempo. La máquina intenta sobrescribir los mismos datos o los datos existentes, mientras se siguen leyendo los datos antiguos. El resultado puede ser una o más de las siguientes situaciones: la computadora se bloquea, aparece un mensaje de operación ilegal y el programa finaliza, los datos antiguos se leen por error o los nuevos datos se escriben por error. En la memoria serie y los accesos de almacenamiento pueden evitar esta situación, cuando los comandos de lectura y escritura ocurren al mismo tiempo, lo predeterminado es realizar la operación de lectura primero.

2. Competencia de datos

        Si la sincronización no se utiliza para la colaboración al acceder a dominios no finales compartidos, se producirá una competencia de datos. Cuando un subproceso escribe una variable y otro subproceso lee esta variable a continuación, o lee una variable previamente escrita por otro subproceso, y no se utiliza la sincronización entre los dos subprocesos, entonces los datos pueden parecer competencia.

        En el modelo de memoria de Java, si hay una carrera de datos en el código, este código puede hacer que el programa concurrente falle.

3. Competencia de datos concurrentes (visibilidad) y condiciones de carrera (atomicidad)

Carrera de datos:

En el acceso a datos en general, si un proceso de lectura y un proceso de escritura no están sincronizados, se producirá un error de acceso a los datos.

Condición de carrera:

Si un cambio en la secuencia de ejecución del programa afectará el resultado final, esta es una condición de carrera.

No todas las condiciones de carrera tendrán datos de competencia. Las condiciones de carrera a veces dependen de la suerte. Las condiciones de carrera se refieren a objetos que no están bloqueados en la clase. Si no hay variables de atributo en una clase, se llama sin estado, por el contrario, se convierte en estado. Para múltiples procesos, si la secuencia de acceso es correcta, no habrá problemas de seguridad como los datos, pero la secuencia de acceso de los procesos es incontrolable y los errores de seguridad también son comunes.

¡El tercer punto es referencia! ! ! , Todos los procesos se utilizan en las publicaciones del blog de citas, pero ¿no se comparten datos entre los procesos? ? ? ¡Deja las dudas! ¡No hay solución hoy! ¡Después de un tiempo para entender! ¡Actualiza de nuevo!

Supongo que te gusta

Origin blog.csdn.net/weixin_44556968/article/details/109983183
Recomendado
Clasificación