A avaliação da instrução “switch” é segura para threads?

Considere o seguinte código de exemplo:

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();
        }
    }
}

Esqueça a inutilidade do trecho: minha dúvida é sobre o comportamento doswitch declaração

Suponha que ox field poderia ter apenas dois valores:0xFF00000000L ou0xFFL. A opção acima não deve cair na opção "padrão".

Agora imagine que um thread esteja executando o switch com "x" igual a 0xFFL, portanto a primeira condição não corresponderá. Ao mesmo tempo, outro thread modifica a variável "x" para 0xFF00000000L. Sabemos que uma operação de 64 bits não é atômica, de modo que a variável terá a palavra-chave inferior zerada primeiro e depois o conjunto superior posteriormente (ou vice-versa

Se a segunda condição no comutador for concluída quando o "x" for zero (ou seja, durante a nova atribuição), entraremos no caso "padrão" indesejad

questionAnswers(4)

yourAnswerToTheQuestion