La evaluación de la declaración de "cambio" es segura para subprocesos?

Considere el siguiente código de muestra:

class MyClass
{
    public long x;

    public void DoWork()
    {
        switch (x)
        {
            case 0xFF00000000L:
                // do whatever...
                break;

            case 0xFFL:
                // do whatever...
                break;

            default:
                //notify that something going wrong
                throw new Exception();
        }
    }
}

lvida la inutilidad del fragmento: mi duda es sobre el comportamiento de laswitch declaración.

Suponga que elxl campo @ podría tener solo dos valores:0xFF00000000L o0xFFL. El interruptor anterior no debe caer en la opción "predeterminada".

Ahora imagine que un subproceso está ejecutando el interruptor con "x" igual a 0xFFL, por lo tanto, la primera condición no coincidirá. Al mismo tiempo, otro subproceso modifica la variable "x" a 0xFF00000000L. Sabemos que una operación de 64 bits no es atómica, por lo que la variable tendrá la dword inferior puesta a cero primero, luego la superior establecida después (o viceversa).

Si la segunda condición en el interruptor se hará cuando la "x" sea cero (es decir, durante la nueva asignación), ¿entraremos en el caso "predeterminado" no deseado?

Respuestas a la pregunta(4)

Su respuesta a la pregunta