|
lngNowNumber= 0
thr1(0) = New Thread(AddressOf thr0)
thr1(0).Start()
lngNowNumber+= 1
thr1(1) = New Thread(AddressOf thr1)
thr1(1).Start()
lngNowNumber+= 1
thr1(2) = New Thread(AddressOf thr2)
thr1(2).Start()
lngNowNumber+= 1
thr1(3) = New Thread(AddressOf thr3)
thr1(3).Start()
lngNowNumber+= 1
thr1(4) = New Thread(AddressOf thr4)
thr1(4).Start()
lngNowNumber+= 1
thr1(5) = New Thread(AddressOf thr5)
thr1(5).Start()
lngNowNumber+= 1
thr1(6) = New Thread(AddressOf thr6)
thr1(6).Start()
lngNowNumber+= 1
thr1(7) = New Thread(AddressOf thr7)
thr1(7).Start()
线程主要变量的操作(所有线程内容一致):
sub thr0
do while lngnownumber<1000
SyncLock Me
lngNowNumber += 1
debug.print(lngNowNumber)
End SyncLock
'以下省略N行数据处理语句,较费时
loop
end sub
共有8个线程,对公共变量lngNowNumber进行处理
输出结果:
线程6: 15
线程4: 17
线程0: 18
线程2: 19
线程5: 20
线程3: 21
线程1: 22
线程0: 23
线程2: 24
线程6: 25
线程5: 26
线程1: 27
线程3: 28
线程4: 29
线程0: 30
线程5: 32
线程0: 33
线程1: 34
线程4: 35
线程2: 36
线程6: 37
线程5: 38
线程3: 39
线程4: 40
线程2: 41
线程3: 42
线程6: 43
线程1: 45
线程6: 47
线程4: 49
线程2: 50
线程0: 51
线程5: 52
线程3: 53
线程1: 54
线程0: 55
线程2: 56
线程6: 57
线程5: 58
线程1: 59
线程4: 60
线程3: 61
线程0: 63
线程0: 64
线程5: 65
线程4: 66
线程1: 67
线程6: 68
线程2: 69
线程3: 70
线程5: 71
线程2: 72
线程4: 73
线程6: 74
线程3: 75
线程1: 76
线程6: 78
线程4: 80
线程2: 82
线程0: 83
线程5: 84
线程3: 85
线程1: 86
线程0: 87
线程2: 88
线程6: 89
线程5: 90
线程1: 91
线程4: 92
线程3: 93
线程0: 95
线程0: 96
线程5: 97
线程1: 98
线程4: 99
线程2: 100
线程6: 101
线程3: 102
线程5: 103
线程4: 104
线程2: 105
线程3: 106
线程6: 107
线程1: 109
线程6: 111
线程4: 113
线程0: 114
线程2: 115
线程3: 116
线程5: 117
线程0: 118
线程1: 119
线程6: 120
问题:
1.线程7没执行(本身是和其他线程一起执行的),到最后才输出(其他线程执行完了才输出)
线程7: 1000
线程7: 1000
2.为什么有些lngNowNumber会被跳过?(注意上面输出的数字不是连续的,有跳空现象)
3.经测试
for i=0 to 8
thr1(i) = New Thread(AddressOf thr1)
thr1(i).Start()
next
执行结果不同于上面的分开addressof
thr1(0) = New Thread(AddressOf thr0)
thr1().Start()
这是为什么?
|
|