Module Module1
Dim test As testclass
Sub Main()
test = New testclass(0)
Task.Run(AddressOf thread1)
Task.Run(AddressOf thread2)
Console.WriteLine("running")
Do
Dim a = read()
Console.ReadLine()
Console.WriteLine($"aa is{a.aa},bb is{a.bb}")
Loop
End Sub
Class testclass
Public aa%
Public bb%
Sub New(v%)
aa = v
bb = v
End Sub
End Class
Sub thread1()
Dim c = 0
Do
test = New testclass(c)
c += 1
Loop
End Sub
Sub thread2()
Do
Dim a = test
If a.aa <> a.bb Then
Console.WriteLine("chatcha")
End If
Loop
End Sub
End Module
рассмотрим приведенный выше код vb, поток создает объекты, другой читает эти объекты, можно ли одному потоку прочитать значение конструкции, так что «catcha» отображается на консоли, учитывая, чтокомпилятор не оптимизирует правильность? (Я тестировал на 64-разрядных Windows, не обнаружено никакого чтения в середину, но я не знаю, что это имеет место в других архитектурах ЦП с более свободной моделью памяти или в другой ситуации)