, Вы должны решить, может ли это вызвать проблемы в вашем конкретном случае использования.

отрим следующий пример кода:

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

Забудьте бесполезность фрагмента: мои сомнения касаются поведенияswitch заявление.

Предположим, чтоx поле может иметь только два значения:0xFF00000000L или же0xFFL, Переключатель выше не должен попадать в опцию «по умолчанию».

Теперь представьте, что один поток выполняет переключение с «x», равным 0xFFL, поэтому первое условие не будет совпадать. В то же время другой поток изменяет переменную «x» на 0xFF00000000L. Мы знаем, что 64-битная операция не является атомарной, так что сначала у переменной будет нулевое нижнее слово, а затем верхнее значение (или наоборот).

Если второе условие в переключателе будет выполнено, когда «x» будет нулевым (то есть во время нового назначения), попадем ли мы в нежелательный случай «по умолчанию»?

Ответы на вопрос(1)

Ваш ответ на вопрос