サーバーが複数のクライアントからの接続を追跡する必要があるアプリケーションを作成しています。各クライアントには、識別のためにすべてのパケットで送信する接続 ID が割り当てられます。接続 ID をクライアント情報にマップしたい。以前は std::map を使用していましたが、スレッドセーフではないことがわかりました。この機能をプレーンな C++03 でサポートできるコンテナーが必要です。サードパーティのライブラリは許可されていません (ラボ機器を使用)。これに失敗した場合、std::map とある種のロックを使用してこれを達成する方法を教えてください
データ構造を info と呼びましょう。実行中の 2 つのスレッドがあります (それぞれ送信と受信用)。それらは、情報に対して次の操作を実行します:-
recv_thread {
//read id
if(id == 0) info.insert(0,clientdata);
else {
do stff, update info[id]
}
send_thread {
for each key in info:
if (key==0) {
delete info[0];
info.insert(connid, clientdata);
}
else {
update info[key]
if(client taking too long) delete info[key];
}
}