Предположим, что у меня есть переменная-член в классе (с атомарным типом данных чтения/записи):
bool m_Done = false;
И позже я создаю задачу, чтобы установить ее в true:
Task.Run(() => m_Done = true);
Мне все равно, когда точно m_Done будет установлено значение true.
Мой вопрос заключается в том, что у меня есть гарантия по спецификации языка С# и параллельной библиотеке задач, которая
в конечном итоге m_Done будет истинным, если я получаю доступ к нему из другого потока?
Пример:
if(m_Done) { // Do something }
Я знаю, что использование блокировок приведет к появлению необходимых барьеров памяти, а m_Done будет отображаться как истина позже. Также я могу использовать Volatile.Write при настройке переменной и Volatile.Read when прочитав его. Я вижу много кода, написанного таким образом (без блокировок или изменчивости), и я не уверен, что это правильно.
Обратите внимание, что мой вопрос не нацелен на конкретную реализацию С# или .Net, он ориентирован на спецификацию. Мне нужно знать, будет ли текущий код работать так же, если он работает на x86, x64, Itanium или ARM.