0

CI で小さな IRC プログラムを作成しています。複数のクライアントを処理するためにスレッドを使用しています。また、チェーン リストを使用して各クライアントの fd を格納しています。したがって、クライアントがメッセージを送信すると、他のクライアントの fd に書き込まれます。 .

これが最善の方法かどうかわかりませんが、何かアドバイスをいただけますか???

さらに、このように、スレッド全体で構造体 (各クライアントのファイル記述子を含む) を共有する必要があるため、スレッドに更新がある場合は、他のスレッドの構造体を更新します。私はこれを行うことができます、どうすればその構造体を共有できますか??

どんな助けでも大歓迎です。

4

2 に答える 2

1

設計について詳しく知らなければ、リンクされた FD のリストが適切かどうかについてコメントすることは非常に困難です。

スレッド間でデータの構造体を共有するという点では、何もする必要はありません。スレッドはメモリ空間を共有するため、あるスレッドで表示されるものは別のスレッドでも表示されます。唯一のリスクは、複数のスレッドが一度に構造体を変更することです。ミューテックス (相互排除セマフォ) を使用して保護します。

Linux を使用しているため、POSIX スレッド ( pthreads ) を使用していると想定しています。その場合、pthread_mutex_関数を確認する必要があります。

于 2013-04-19T13:26:07.493 に答える
0

あなたのセットアップでは、私は以下を使用します:

  • チャネルごとに 1 つの入力キュー、
  • クライアントごとに 1 つの出力キュー。

クライアント スレッドがメッセージを受信するたびに、それをチャネル スレッドにポストします。チャンネルが新しい投稿を受け取ると、それをすべてのクライアントに再投稿します。各チャネルとクライアントは として表すことができstruct、スレッドによって処理されます (スレッドごとに 1 つ以上のクライアントまたはチャネルを使用)。

すべてのキューは、 を使用して保護された単純なリンク リストpthread_mutex_tです。関数がそれらにアクセスする必要がある場合、キューをロックし、メッセージを追加して、ロックを解除します。

于 2013-04-19T17:30:51.003 に答える