2011-05-27 11 views
12

Me pregunto, ¿hay alguna diferencia entre cómo se incrementa una variable estática en Java y C# en un entorno enhebrado?diferencia entre el entero atómico Java y C# Interlocked.Increment method

En Java que utilizan atómica int: s para hacer esta operación y en C# que utiliza Interlocked.Incement (ref yourVar)

que este no vale el código que escriba, pero cómo es en realidad bloquea la memoria y hace el incremento real

+2

Esta no es una pregunta de idioma. Las diferentes versiones o implementaciones diferentes, o diferentes objetivos de plataforma de una máquina virtual pueden afectar el comportamiento interno de tales funciones. – CodesInChaos

+0

En realidad java es MUY, tiene una base muy CAS (en su esencia) y ofrece primitivas CAS también. Entonces la impl: LL/CS o CAS natural no importa. C# usa la función interconectada WinAPI para impl. que si la memoria le sirve bien, agregue w/LOCK prefix. – bestsss

Respuesta

9

La operación de enclavamiento no bloquea la memoria, sino que emite el prefijo LOCK según las instrucciones en función de la operación. Eso hace que el procesador active el bloqueo de bus para que solo se ejecute la instrucción una vez. Puede consultar el following article

+4

+1, este no es el 'candado' que está buscando. – user7116

2

En el caso de Java, el "cómo funciona" depende del conjunto de instrucciones de la plataforma de ejecución. Estaba leyendo (hoy antes mientras esperaba que termine una interminable actualización del sistema operativo) que en las clases x86 AtomicXxx se implementan usando una instrucción Compare and Swap (CAS).

+0

Sí, las cosas atómicas son loop (si (cas) break) en java. Interbloqueado en C# puede ser implementado a través de LOCK ADD. – bestsss

Cuestiones relacionadas