2011-12-22 10 views
2

スレッドの同期化、つまりそれらを開始する方法と方法については、多くのリソースがあります。
しかし、スレッドを起動し、出力結果を順序どおりに取得したいと考えています。例えばストリーム・データへのスレッド・プール出力のシーケンス

Iしている場合、:
スレッド1出力リレー:データ1
スレッド2出力リレー:データ2
糸3出力リレー:データ3

をIスレッド順次(スレッド1、2を開始します、3)、オーダーリスト(データ1、2、3)のデータを取得したい。ご存知のように、スレッド2が終了し、スレッド3よりも先に出力を配信するという保証はありません。したがって、スレッドが希望の出力を提供しているので、順序性と順序を再導入するための効率的な方法が必要です。

EDIT:
非常に重要な精度(コメンテーターで述べたように):
スレッドプールは24/7を実行するために起こっているとのデータが固定セットが、データストリームではありません。
さらに、従来の問題のために.Net 3.5にバインドされています。

+1

なぜ出力を順次にしたいのですか? –

+0

1つの固定データセット用か、またはある時間(別名パイプライン)同時にスレッドを実行する予定ですか? – alexm

+2

@ M.Babcockスレッド処理を使用すると、項目をすばやく処理できますが、結果は順序どおりになります。これは珍しい要件ではありません。 –

答えて

1

PLINQを使用するとよいでしょう。それは次のようにあなたは、あなたのデータを作成し、クエリを記述することができます

:この場合

var results = inputData.AsParallel().AsOrdered().Select(inputValue => ComputeOutputData(inputValue)); 

を、AsOrderedへの呼び出しは、クエリが並列で実行できるようになりますが、あなたの結果が戻って来るために適切な元の順序。

+1

あなたが言いたいことは、PLINQは.NET 4でのみ(完全に)利用可能であるということです。それ以前に何かを使用しているのであれば、独自の同期メカニズムを実装する必要があります。 –

+0

うわー、PLINQはクールです! – zmbq

+0

edit –

関連する問題