En Java, la actualización de las variables dobles y largas puede no ser atómica, ya que las dobles/largas se tratan como dos variables separadas de 32 bits.Está Actualizando la operación doble atomic
http://java.sun.com/docs/books/jls/second_edition/html/memory.doc.html#28733
En C++, si estoy usando el procesador Intel de 32 bits + compilador Microsoft Visual C++, está actualizando doble (8 bytes) operación atómica?
No encuentro mucha mención de especificación sobre este comportamiento.
Cuando digo "variable atómica", esto es lo que quiero decir:
Tema Una tratando de escribir 1 a la variable x. El hilo B intenta escribir 2 en la variable x.
Obtendremos el valor 1 o 2 de la variable x, pero no un valor indefinido.
Sí, 32-bit x86 (desde Pentium original) tiene [soporte de hardware eficiente] (https://stackoverflow.com/questions/36624881/why-is-integer-assignment-on-a-naturally-aligned-variable -atomic) para 'std :: atomic at- 'sin bloqueo cargar, almacenar y CAS. Si su compilador crea un código eficiente o no es otro problema: https://stackoverflow.com/questions/45055402/atomic-double-floating-point-or-sse-avx-vector-load-store-on-x86-64. El 'doble' alineado nunca tendrá" rasgado ", pero es más seguro usar' std :: atomic '. –