Löschen von std :: map unter einer Sperre oder Verschieben in ein temporäres Objekt

8

Ich verwende eine std :: map und habe eine große Anzahl von Elementen. Wenn ich die Karte löschen muss, kann ich einfach clear () aufrufen. Es kann einige Zeit dauern, um zu löschen, und vor allem, wenn es unter einer Sperre in einer Multithread-Umgebung ausgeführt wird, kann es andere Aufrufe blockieren. Um den Aufruf von clear () zu vermeiden, habe ich Folgendes versucht:

%Vor%

Dadurch wird my_map in temp_map unter der Sperre verschoben, wodurch es gelöscht wird. Und sobald die Funktion beendet ist, wird die Temp_Map zerstört.

Ist das ein besserer Weg, um das Schloss für lange Zeit nicht zu nehmen? Gibt es Leistungseinbußen?

    
kwadhwa 22.06.2017, 21:01
quelle

1 Antwort

5

Ich würde empfehlen, swap anstelle von move zu verwenden. Es ist nicht garantiert, dass ein verschobenes Objekt tatsächlich leer oder sogar verwendbar ist. Aber mit swap und einem neu erstellten Objekt sind Sie sich der Ergebnisse sicher:

%Vor%     
rodrigo 22.06.2017, 21:37
quelle