首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

VB.NET并行与分布式编程(六)-线程与内核同步[6]

2012-08-22 
VB.NET并行与分布式编程(6)-线程与内核同步[6]1、1)WaitHandle.WaitAny 方法和WaitHandle.WaitAll方法的区

VB.NET并行与分布式编程(6)-线程与内核同步[6]

1、

1)WaitHandle.WaitAny 方法和WaitHandle.WaitAll方法的区别在于,WaitAny方法只

?3、效果如下:


VB.NET并行与分布式编程(六)-线程与内核同步[6]
?

?

4、代码分析如下:

1)??创建一个简单的线程池以及每个线程使用的AutoResetEvent

??????? ?'完成任务的线程号
??????? Dim finishedid As Integer
??????? '自己创建线程对象数组(不使用.NET的线程池),共5个线程
??????? Dim mythread(4) As Thread
??????? '分别给每个线程创建一个AutoResetEvent
??????? Dim threadevent(4) As AutoResetEvent

?

注意finishedid将保存最先完成任务的线程号

2)对线程池的每个线程对象初始化,指定名称。同时也初始化AutoResetEvent数组

??????? For i = 0 To mythread.GetUpperBound(0)
??????????? mythread(i) = New Thread(AddressOf mythreadrun)
??????????? threadevent(i) = New AutoResetEvent(False)
??????????? mythread(i).Name = "thread_" & i
??????? Next

3)指定4号线程的优先级,比其它线程池的线程要高,同时启动线程,将AutoResetEvent数组中的元素做为参数传进线程中

??????? mythread(4).Priority = ThreadPriority.AboveNormal
??????? '执行线程
??????? For i = 0 To mythread.GetUpperBound(0)
??????????? mythread(i).Start(threadevent(i))
??????? Next

4)?等待其中一个线程完成累加:

??????? finishedid = WaitHandle.WaitAny(threadevent)

????? 将其它未完成任务的线程终止?:
??????? For i = 0 To mythread.GetUpperBound(0)
??????????? If i <> finishedid Then
??????????????? mythread(i).Abort()
??????????? End If
??????? Next

5)线程函数中完成累加,并输出结果

?????????? For mynum = 1 To 2000
??????????????? jg += mynum
??????????????? Thread.Sleep(5)
??????????? Next
??????????? Console.WriteLine(Thread.CurrentThread.Name & "? " & Now.ToLongTimeString & "线程运行完毕!")
??????????? Console.WriteLine(Thread.CurrentThread.Name & "==>" & Now.ToLongTimeString & "=>计算结果为:" & jg)
?6)设置 AutoResetEvent对象状态

??????? Finally
??????????? CType(threadevent, AutoResetEvent).Set()

?

热点排行