Здравствуйте, seno, Вы писали:
S>Вопрос: каковы возможные результаты работы Thread 2 (можно выбрать несколько)? S>а) Ничего не отпечатает; S>б) Отпечатает 0; S>в) Отпечатает 1.
Все варианты возможны. В данном сценарии нет никаких ограничений.
Если даже считывать ту же переменную, то все равно все будет так же, т.к. нет гарантии, что второй поток выполнится до присваивания volatile в первом.
Еще момент, что компилятор в праве переупорядочить присваивания 'a' и 'flag' или придумать еще более страшную оптимизацию, так как они не volatile.