1

処理中のオブジェクトのキューを持ついくつかのスレッドがありますが、別のスレッドがさまざまな入力からこれらのオブジェクトを読み取って作成します。特定のスレッドで処理する必要のある特定のオブジェクトがありますが、他のオブジェクトは任意のフリースレッドで処理できます(したがって、すべてのオブジェクトに1つのキューを使用しない理由)が、それでも負荷のバランスを合理的に保ちたいと思います。各スレッドが使用するすべてのConcurrentQueuesを含む配列があり、それらの数に基づいて順序付けたいと思います。ほとんどの場合、キューはほぼソートされるため、ここでは挿入ソートが適切に機能します。

(編集: http: //msdn.microsoft.com/en-us/library/6tf1f0bc(v = vs.100).aspxによると、 「このメソッドはQuickSortアルゴリズムを使用しているため、私は自分で書いています。 "そして挿入ソートが欲しい)

http://en.literateprograms.org/Insertion_sort_(Visual_Basic_.NET )を使用して手を差し伸べましたが、自分自身を本当に信用していません。これは正しいように見えますか?

        Dim i As Integer = 0

        While (i < MaxThreads)

            Dim j As Integer = i - 1
            Dim v As Concurrent.BlockingCollection(Of BufferEntry) = ThreadQueues(i)

            While (j > -1)
                If (ThreadQueues(j).Count <= v.Count) Then Exit While
                ThreadQueues(j + i) = ThreadQueues(j)

                j -= 1
            End While

            ThreadQueues(j + 1) = v

            i += 1
        End While
4

1 に答える 1

2

全体的にはかなり良さそうですが、このラインだと思います

ThreadQueues(j + i) = ThreadQueues(j)

する必要があります

ThreadQueues(j + 1) = ThreadQueues(j)
于 2013-01-17T06:06:09.953 に答える