📄 frmmorethreads.vb
字号:
Imports Microsoft.VisualBasic
Imports System
Imports System.Windows.Forms
Imports System.Threading
Imports System.Diagnostics
Imports System.Collections.Generic
Namespace CodeForChapter11cs
Public Partial Class frmMoreThreads
Inherits Form
Public Sub New()
InitializeComponent()
End Sub
Private someCounter As Long = 0
Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles button1.Click
someCounter = 0
Dim t1 As Thread = New Thread(AddressOf Me.ThreadBoth) ' Me.ThreadFirst1)
t1.Name = "Worker Thread 1 "
Dim t2 As Thread = New Thread(AddressOf Me.ThreadBoth) ' Me.ThreadSecond2)
t2.Name = "Worker Thread 2 "
t1.Start()
t2.Start()
t1.Join()
t2.Join()
MessageBox.Show("Final result = " & someCounter.ToString())
End Sub
#Region "race condition 1"
Private Sub ThreadFirst1()
For j As Long = 0 To 99999999
Debug.WriteLine(Thread.CurrentThread.Name & "before inc")
someCounter += 1
Next j
MessageBox.Show(Thread.CurrentThread.Name, "Done")
End Sub
Private Sub ThreadSecond2()
For j As Long = 0 To 99999999
Debug.WriteLine(Thread.CurrentThread.Name & "before inc")
someCounter -= 1
Next j
MessageBox.Show(Thread.CurrentThread.Name, "Done")
End Sub
#End Region
Private Sub ThreadBoth()
Debug.WriteLine(Thread.CurrentThread.Name & "enters method")
Dim localVar As Integer = 0
localVar += 1
'SyncLock (someLock) ' uncomment the lock region to achieve the undesired effects
If someCounter = 0 Then
Debug.WriteLine(Thread.CurrentThread.Name & "in if block")
Thread.Sleep(1) 'simulate some longer activity
someCounter += localVar
Debug.WriteLine(Thread.CurrentThread.Name & "just incremented")
Else
Debug.WriteLine(Thread.CurrentThread.Name & "in else block")
someCounter += 3
End If
'End SyncLock
Return
End Sub
#Region "Not used in sample. Shows Monitor code"
Private someLock As Object = New Object()
Private Sub SomeMethod()
' some code
Monitor.Enter(Me)
Try
' critical region, only 1 thread at a time enters this
Finally
Monitor.Exit(Me)
End Try
' other code
End Sub
#End Region
End Class
End Namespace
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -