¿Un programa correctamente sincronizado sigue permitiendo la carrera de datos? (Parte I)

Hay dos conclusiones de JLS:

C1: Si un programa está libre de carreras de datos, todas las ejecuciones del programa parecerán ser consistentemente secuenciales:data-race-free => sequentially consistentC2: Si un programa está correctamente sincronizado, todas las ejecuciones del programa parecerán ser consistentemente secuenciales:correctly synchronized => sequentially consistent

Si lo contrario de C1 es verdadero, entonces podemos concluir que:

C3: si un programa está correctamente sincronizado, entonces está libre de carreras de datos:correctly synchronized => data-race-free

Pero desafortunadamente, no hay tal declaración en el JLS, así que llego a la cuarta conclusión:

C4: Un programa puede sincronizarse correctamente y tener carreras de datos.

Pero no estoy satisfecho con este enfoque y quiero obtener una prueba de que esta conclusión es verdadera (o falsa), incluso de manera informal o de manera muestral.

En primer lugar, creo que un segmento de código que muestra una ejecución secuencialmente coherente de un programa de múltiples subprocesos que contiene una carrera de datos es útil para comprender y resolver este problema.

Después de una seria consideración, todavía no puedo encontrar una muestra adecuada. Entonces, ¿podría por favor darme un segmento de código?

Respuestas a la pregunta(3)

Su respuesta a la pregunta