C、pthreads、およびソケットを使用して Linux でアプリケーションを作成しています。
これはクライアント/サーバー アプリケーションで、サーバーには N+2 スレッドがあり、N - アクティブなクライアントの数で、1 つのスレッドは新しい接続を受け入れてクライアントのスレッドを作成し、最後の 1 つはユーザー入力を受け入れます。
リンクされたリストを使用して、アプリケーションに関連するいくつかのデータを保存します。すべてのクライアントがリスト内の 1 つのノードに関連付けられます。これらのクライアント スレッドは、ノードに保存されている情報を、1 秒、2 分などの間隔で更新し、動的に変化します。
ここに問題があります。ユーザーが要求した場合、リンクされたリストに格納されている情報を標準出力に書き込む必要があります。もちろん、書き込み中にミューテックスを取得する必要があります。リスト全体に対して1つのミューテックスがパフォーマンスを妨げるのではないかと心配しています。
すべてのノードにミューテックスを関連付けることを考えていましたが、指定されたノードの削除が複雑になります (まず、「stdout ライター」スレッドがリストをトラバースしないようにする必要があり、ミューテックスも取得する必要があります)。私のノードと前のノードの次のノードを指すポインターを変更するなど-前のノードまでずっとトラバースする必要があるか、二重リンクリストを作成する必要があります)。
したがって、複数のミューテックスを含むソリューションが、はるかに複雑なコード、条件、およびこのすべてのロック、待機、およびロック解除でさらに優れているかどうか疑問に思っています。