私は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();
}
}
}
'ItemInUse'と呼ばれる' bool'フラグのようです。このオブジェクトは、アクセスを待つ必要があり、同期オブジェクトを使用します。アプリケーションの実際のデータではありません。単に 'ItemInUse'がfalseの場合は、それをtrueに設定し、データで何をしたいのかを行い、終了すると再びfalseに設定します。 –
キューは送信側スレッドのローカルなので、スレッド2は送信キューに新しいオブジェクトを追加します。しかし、あなたはそれが同時読み書きだと言っているが、チャンク1を送信した後に新しいオブジェクトを追加する方法はないので、私はそれを行うことはできないのですか? – BoinQ