COM のマルチ スレッド アパートメントとシングル スレッド アパートメントの違いを理解しています。
以下のコードを参照してください。
'VB.NET
Imports Project1
Imports System.Threading
Public Class Form1
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim t1 As New Thread(AddressOf PersonTest.Test2)
Dim t2 As New Thread(AddressOf PersonTest.Test2)
Dim t3 As New Thread(AddressOf PersonTest.Test2)
t1.Name = "Test1"
t2.Name = "Test2"
t3.Name = "Test3"
t1.Start()
t2.Start()
t3.Start()
End Sub
End Class
Public Class PersonTest
Public Shared Sub Test2()
Try
Dim c1 As Class1
c1 = New Class1
For test3 As Integer = 0 To 10000
For test As Integer = 0 To 10000
Dim test2 As Short = c1.Add(CShort(test))
If test2 <> test + 1 Then
MsgBox("Problem here")
End If
Next
Next
MsgBox("finished")
Catch ex As Exception
End Try
End Sub
End Class
Public Class Person
Public id As Integer
End Class
'VB6 - Project1.vbp,class1
Public Test2 As Integer
Public Function Add(ByVal TestParameter As Integer) As Integer
Test2 = TestParameter + 1
Add = Test2
End Function
私が読んだ内容に基づいて、複数のスレッドが Person.ID の値を同期から変更する可能性があるため、「MsgBox("Problem here")」が表示されることを期待しますが、このプログラムを何度もテストしましたが、一度も実行されたことはありません起こりました。スレッドでは「何も保証されていない」ことを理解しています。上記のコードは理論的に問題を引き起こす可能性がありますか? 答えが「いいえ」の場合、問題を引き起こすためにコードをどのように修正できますか? 私はスレッドセーフなコードを書く方法を学ぼうとしています.これを行うには、まずコードがスレッドセーフではない可能性があることを理解する必要があります.