Multi-roscado y altamente concurrentes 2-volitile, sincronización, CAS

voto

la variable
para asegurar la visibilidad de la rosca, que prohíbe el reordenamiento de comandos. Pero no se garantiza la atomicidad

escenarios volitile

Lazy DCL, doble comprobación de sincronización

propiedades volitile

Prohibir el reordenamiento de instrucciones

la realización de la CPU: lfence, sfence, mfence primitiva
implementaciones de JVM SS, LL, SL, LS barrera
volitile lograr: ser leído después de terminadas las operaciones de escritura solamente
las operaciones de lectura a las operaciones de escritura sólo después de la lectura

Asegúrese de hilo visibilidad

Hardware CPU, el protocolo de coherencia de caché (MESI)
por la memoria de trabajo con prontitud se escribe en la memoria principal, asegurar la visibilidad entre los hilos.

sincronizada engrosamiento refinamiento

Refinamiento: Cuando la lógica de servicio requiere sólo una pequeña parte de los métodos de sincronización, el método no necesita para bloquear la totalidad
rugosa: Cuando la lógica de servicio en el proceso de bloqueo de una pluralidad de partes, se prefiere el método directamente bloqueo

uso sincronizado de puntos

1, sincronización está bloqueado objeto, cuando un objeto está bloqueado, cambió el objeto causará problemas. Así que cuando el objeto es añadir declaración final
2, no tienen un objeto de tipo cadena como un bloqueo, un callejón sin salida es probable que causa la obstrucción, ya que es probable que el programa y los usos de la biblioteca la misma cerradura

CAS (sin optimización de bloqueo, giro, bloqueo optimista)

Inseguro: Comparar y de intercambio

CAS (valor, el esperado, NewValue)
si E V ==
V == nuevo nuevo
de otro modo el try o fracasar de nuevo
la CPU primitiva apoyo, el funcionamiento no permitido a inserto

ABA problema: un hilo A-> B, un hilo de BA. Tipos de referencia tienen problemas (citado ha sido objeto de una modificación), no el problema subyacente tipo de datos.
Al aumentar el número de versión se determina (An AtomicStampedReference)

Bajo JUC en paquetes son atómicas aplicación CAS

Inseguro

Operación de memoria directa: AllocateMemory
instancia de clase generada directamente: allocateInstance
acción directa de clase o instancia variables: los getObject
operaciones relacionadas con el CAS: CompareAndSwap int objeto largo

Publicado 25 artículos originales · ganado elogios 0 · Vistas 585

Supongo que te gusta

Origin blog.csdn.net/RaymondCoder/article/details/105068800
Recomendado
Clasificación