Здравствуйте, remark, Вы писали:
R>Если flag объявлен как volatile, то да, если нет — то нет.
А Вы вообще как, знаете что такое язык C#? И что означает слово volatile в этом языке? Вы его с Си или с Си++ не перепутали случайно? Пожалуй, перепутали.
Напоминаю:
1) В языке C# есть такое правило, что если функция объявлена так: void F (ref int x) то фактический параметр x не может быть volatile.
2) int System.Threading.Interlocked.Exchange(ref int location1, int value)