私はオブジェクトのポインタを格納するunordered_mapのunordered_mapを持っています。順序付けられていないマップは、複数のスレッドによって共有されています。私は各オブジェクトを反復し、時間のかかる操作(ネットワークなどを介して送信するなど)を実行する必要があります。 unordered_mapをロックして、それが長時間ブロックされないようにするにはどうすればよいですか?ロック内のSTLコンテナで時間のかかる操作を実行する
typedef std::unordered_map<string, classA*>MAP1;
typedef std::unordered_map<int, MAP1*>MAP2;
MAP2 map2;
pthread_mutex_lock(&mutexA) //how could I lock the maps? Could I reduce the lock granularity?
for(MAP2::iterator it2 = map2.begin; it2 != map2.end; it2++)
{
for(MAP1::iterator it1 = *(it2->second).begin(); it1 != *(it2->second).end(); it1++)
{
//perform some time consuming operation on it1->second eg
sendToNetwork(*(it1->second));
}
}
pthread_mutex_unlock(&mutexA)
ロック解除後にmap2アイテムの一部が消去されるとどうなりますか? – 9dan
あなたの例では、MAP2とMAP1の関係はMAP2にMAP1要素のポインタが含まれているため、MAP2要素の削除によってMAP1要素が削除されないことに注意してください。 – Ismael