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

高分:多线程调用队列的值

2012-02-08 
高分求救:多线程调用队列的值我想用多线程(5-10)个线程调用一个队列(先进先出)的值,一个线程完毕后,自动调

高分求救:多线程调用队列的值
我想用多线程(5-10)个线程调用一个队列(先进先出)的值,一个线程完毕后,自动调用下一个队列里的值。
有没有示例?求救!本人是vb.net菜鸟,希望尽量详细 最好有代码可用

[解决办法]

VB.NET code
Imports System.Collections.GenericImports System.ThreadingImports System.Runtime.CompilerServicesModule Module1    Dim q As Queue(Of Integer)    Sub Main()        q = New Queue(Of Integer)        For i As Integer = 1 To 1000            q.Enqueue(i)        Next        Dim threadArr(10) As Thread        For i As Integer = 0 To threadArr.Length - 1            threadArr(i) = New Thread(AddressOf Print)        Next        For i As Integer = 0 To threadArr.Length - 1            threadArr(i).Start()        Next        Console.ReadLine()    End Sub    Sub Print()        Dim temp As Integer        While q.Count > 0            SyncLock q                If q.Count > 0 Then                    temp = q.Dequeue()                End If            End SyncLock            Console.WriteLine(temp.ToString())        End While    End SubEnd Module
[解决办法]
Module Module1

Dim q As Queue(Of Integer) '定义一个整型集合

Sub Main()

q = New Queue(Of Integer)‘实例化集合

For i As Integer = 1 To 1000 ’将1000个数值添加到集合q
q.Enqueue(i)
Next

Dim threadArr(10) As Thread '定义11个线程

For i As Integer = 0 To threadArr.Length - 1 '实例化线程
threadArr(i) = New Thread(AddressOf Print) '线程执行过程 "Print "
Next

For i As Integer = 0 To threadArr.Length - 1
threadArr(i).Start() '启动线程
Next

Console.ReadLine()’读行?不知道什么意义

End Sub


Sub Print()’用来给线程执行的过程。
Dim temp As Integer
While q.Count > 0 '如果集合q含有数值

'监视集合q,在 SyncLock 代码区域内只允许一个线程执行,其他线程会被挂起直到前一个线程运行到End SyncLock之后。可以避免线程调用冲突。
SyncLock q
If q.Count > 0 Then
temp = q.Dequeue() '取出数值
End If
End SyncLock
Console.WriteLine(temp.ToString()) '将数值写到输出窗口
End While
End Sub

End Module

热点排行