0

クライアントの接続を待機するアプリケーションがあります。クライアントが接続するたびに、新しいフレームが作成されます (新しいソケット ファイル記述子を使用)。接続するクライアントの数はわかっています。その数に達したら、for ループで pthread_join を実行します。

私の問題は、メインスレッドで他のすべてのスレッドを制御したいということです。私の目標は、各スレッドが同じメッセージを同時にクライアントに 1 回だけ送信するようにすることです。スレッドが送信できるメッセージは複数あります。

私の現在の考えは、次のようにコマンドのリストを定義することです:

char *commands[] = {
                (char*) "TERMINATE\0",
                .... };

次に、その char* 配列で使用するコマンドを表すコマンド番号を指定します。すべてのスレッドは次のようなことを行います

write(sockfd, buffer[commandNumber], length[commandNumber]);

条件変数を待機することを考えましたが、次の 2 つの問題があります。

1) 各スレッドが同期されていても、コマンドを 1 回だけ実行するようにしたい。

2) コマンドを開始するメイン スレッドは、これらのすべてのスレッドがコマンドの実行をいつ終了するかを知る必要があります。

2) を実行する唯一の方法は、(mutex を使用して) カウンターを追跡することであり、各スレッドがコマンドを実行すると、そのカウンターを増やすことができます。スレッドがコマンドを 2 回実行するのを回避できるかどうかはわかりません。

一度に単一のアクションを実行するために複数のスレッドを調整するための最良の方法は何ですか? また、そのアクションがすべてのスレッドでいつ実行を終了したかを知ることができますか?

4

1 に答える 1