Возьмем эту программу в качестве примера:
class Program
{
public static double myVar1 = 0;
public static double myVar2 = 0;
static void Main()
{
Thread thread1 = new Thread(new ThreadStart(update_variable));
thread1.Start();
while (true)
{
myVar2 = myVar1;
}
}
static update_variable()
{
while (true)
{
myVar1 = 2222222.22;
myVar1 = 1111111.11;
}
}
}
Возможно ли, чтобы myVar2 равнялся значению, отличному от 222222.22 или 1111111.11?Другими словами, изменились ли байты для переменной «все или ничего» или основной поток мог увидеть myVar1 в момент времени, когда некоторые байты изменились, а другие нет, что дало неожиданное значение?
Я протестировал вышеупомянутую программу и не вижу такого поведения, но мне интересно, возможно ли это и будет ли это рассматриваться как потокобезопасный код.Я бы предпочел не использовать ресурсы блокировки, поскольку у меня есть только один поток, который изменяет данные, и один, который использует данные.