2016-05-13 3 views
0

私はC#でP2Pアプリケーションを開発中です。 ファイル分割、テキストチャットによるファイル転送です。同じリストで動作する2つのスレッド

クライアントには、リスン用に1つ、送信用に1つの2つのスレッドがあります。 私はファイルを送信すると、最初に10個の断片に分割されます。これらの10個の断片がクライアントの送信キューに追加され、ファイルチャンク1が送信されます。 しかし、今は同じパイプ。 私の考えは、ファイルチャンク2の前にそのメッセージを送信リストに挿入することです。 2つのスレッドが同じリストで動作するためにはどんな種類のスレッドが必要ですか? 私はこのように受け取っているオブジェクトを説明しました。あなたが同じファイルを読み込む/レース条件や同時書き込みを防ぐために、このようなミューテックスとしてSynchronization Objectを使用することができ

public void Send() 
{ 
    while (IsConnected()) 
    { 
     if (unSentObjects.Count > 1) 
     { 
      Task sendTask = new Task(() => SendObj(unSentObjects[0])); 
      sendTask.Start(); 
     } 
    } 
} 

答えて

0

:送信機能のための

私の最初のアイデアは、これらの線に沿って何かでした。基本的に1つのスレッドだけがオブジェクトにアクセスできます。

データがスレッドに対してグローバルであり、すべてが一度処理されている場合は、同期オブジェクトを使用して、グローバル共有データを使用するタイミングと使用しないタイミングを通知できます。共有されたグローバルデータを使用する以外はまったく同じです。あなたはそれを使用してトラフィッキングしています。

+0

'ItemInUse'と呼ばれる' bool'フラグのようです。このオブジェクトは、アクセスを待つ必要があり、同期オブジェクトを使用します。アプリケーションの実際のデータではありません。単に 'ItemInUse'がfalseの場合は、それをtrueに設定し、データで何をしたいのかを行い、終了すると再びfalseに設定します。 –

+0

キューは送信側スレッドのローカルなので、スレッド2は送信キューに新しいオブジェクトを追加します。しかし、あなたはそれが同時読み書きだと言っているが、チャンク1を送信した後に新しいオブジェクトを追加する方法はないので、私はそれを行うことはできないのですか? – BoinQ

関連する問題