Red de conocimiento del abogados - Preguntas y respuestas jurídicas - ¿Cuándo es necesario agregar volátil en la programación multiproceso?

¿Cuándo es necesario agregar volátil en la programación multiproceso?

No utilice volátiles en programación multiproceso C/C++.

(Nota: Lo que esto significa es que es muy arriesgado esperar que volátil resuelva problemas de competencia de subprocesos múltiples. A menos que el sistema ambiental utilizado no sea confiable, se agregará volátil por razones de seguridad o de eficiencia extrema. Considere implementar una interfaz de muy bajo nivel. Esto requiere que el escritor tenga muy clara la lógica del programa; de lo contrario, se producirán errores).

El estándar C++ 11 establece claramente que se debe resolver la competencia de datos de subprocesos múltiples. Los problemas deben solucionarse mediante operaciones atómicas o bloqueos mutex.

Volatile en C y C++ no se usa para resolver problemas de competencia multiproceso, sino que se usa para modificar algunas variables que cambian debido a factores fuera del control del programa, como variables que acceden a dispositivos de hardware subyacentes. , para recordar El compilador no debe optimizar el acceso a esta variable sin autorización.

En pocas palabras, bloquear el bloque de código que accede a los datos compartidos es suficiente para garantizar la sincronización del acceso a los datos, y agregar volátiles es completamente innecesario.

Si solo usa modificaciones volátiles en variables compartidas sin bloquear o usa operaciones atómicas en operaciones que pueden tener competencia, no servirá de nada para resolver la competencia multihilo, porque volátil no garantiza la operación. Atomicidad, en el proceso de lectura y escritura de variables, aún puede ser interrumpido por otros subprocesos, lo que provoca resultados inesperados.