Создает ли объекты потокобезопасную операцию в .net framework - PullRequest
0 голосов
/ 06 ноября 2019

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, не обнаружено никакого чтения в середину, но я не знаю, что это имеет место в других архитектурах ЦП с более свободной моделью памяти или в другой ситуации)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...