Warum kann ich nicht zwei Accessoren für dasselbe Element in der tbb-Hash-Map haben?

8

Wenn ich im folgenden Code a1 nicht freigebe, scheint der Code in einer Endlosschleife innerhalb der Funktion map.find hängen zu bleiben.

Was ist, wenn ich nach einem Element in zwei verschiedenen Teilen der Anwendung suchen muss?

%Vor%     
Jack 24.07.2017, 06:34
quelle

1 Antwort

8

Ein Accessor erlaubt Schreibzugriff . Dies bedeutet, dass eine Schreibsperre erworben wird und von nicht mehr als einem einzelnen Accessor gehalten wird. Sie geben einen Deadlock ein, weil derselbe Thread versucht, das gleiche Element zum Schreiben über verschiedene Accessoren zu sperren.

Wenn Sie die Daten nur lesen möchten, verwenden Sie const_accessor mit find . Es wird nur eine Lesesperre erhalten. Mehrere Lesesperren können ohne Deadlocking erfasst und gehalten werden.

%Vor%     
StoryTeller 24.07.2017, 07:20
quelle

Tags und Links