TBB concurrent_hash_map iterate erase



  • Hallo zusammen,

    ich habe da mal eine Frage bezüglich der erase() Methode in der concurrent_hash_map. Ich habe einen Job, der alle Paar Minuten, anabhängig von anderen Threads, über diese Hash Map läuft und Elemente(in einer Struktur) auf ihr Datum prüft und alle, welche älter sind als x Minuten raus löscht.

    for (tbb::concurrent_hash_map<std::wstring, guid_fk_element, Helper::TBBGUIDComparer>::iterator it = tbb_guid_fk_map.begin(); it != tbb_guid_fk_map.end(); ++it)
    {
    	if ((std::time(nullptr) - it->second.CTime) >= 60 * 60 * 0.5) // Elemente nach einer halben Stunde löschen
    	{
    		//it = tbb_guid_fk_map.erase(it->first);
    		tbb_guid_fk_map.erase(it->first);
    	}
    	//else
    	//{
    	//	++it;
    	//}
    }
    

    Mir fällt es leider gerade aufgrund der Code- und Anwendungsgröße leider etwas schwer, das ganze richtig zu testen.
    Bei der std::concurrent_hash_map ist der Iterator neu zu setzen. Das funktioniert bei TBB allerdings nicht. Weiß jemand ob der automatisch neu ausgerichtet wird?

    Gruß


Log in to reply