data-structures

___ qstnhdr ___ Ist standardmäßig std :: vector threadsicher und gleichzeitig? Warum oder warum nicht? ___ qstntxt ___

Was bedeutet es, ein dynamisches Array threadsicher und gleichzeitig zu machen? Sagen Sie beispielsweise %code% .

  1. Zwei Threads möchten möglicherweise an der gleichen Position eingefügt werden. Es ist keine Synchronisation erforderlich, da dies gemäß der Thread-Planung durchgeführt wird.
  2. Ein Thread wird gelöscht und ein anderer greift auf dasselbe Element zu? Dies ist kein Problem mit der Datenstruktur. Ich glaube, es ist ein Nutzungsproblem.

Gibt es also etwas, das über %code% erledigt werden muss, um es threadsicher und gleichzeitig zu machen oder ist es threadsicher und gleichzeitig standardmäßig?

    
___ tag123datastrukturen ___ Eine Datenstruktur ist eine Möglichkeit, Daten so zu organisieren, dass bestimmte Eigenschaften dieser Daten effizient abgefragt und / oder aktualisiert werden können. ___ tag123concurrency ___ In der Informatik ist Nebenläufigkeit eine Eigenschaft von Systemen, in denen mehrere Berechnungen in überlappenden Zeiträumen durchgeführt werden können. Die Berechnungen können auf mehreren Kernen in demselben Chip, präemptiv zeitgeteilten Threads auf demselben Prozessor oder auf physikalisch getrennten Prozessoren ausgeführt werden. ___ tag123vector ___ Ein Vektor ist ein eindimensionales Array: Er enthält Komponenten, auf die mit einem ganzzahligen Index zugegriffen werden kann. In einigen Sprachen kann die Größe eines Vektors nach Bedarf vergrößert oder verkleinert werden, um Elemente hinzuzufügen und zu entfernen, nachdem der Vektor erstellt wurde. Verwenden Sie "Vektorgrafiken" für die grafische Darstellung. ___ answer31132250 ___

Die einzigen gleichzeitigen Operationen für ein einzelnes Objekt in der Standardbibliothek, die standardmäßig sicher sind, sind  - Nur Zugriff auf %code% -Member Funktionen  - Alle Zugriffe auf Synchronisationsprimitive (wie Mutex Lock und Unlock oder atomare Operationen) Alles andere muss extern synchronisiert werden. Insbesondere hat die Standardbibliothek noch keine threadsicheren Container (ab c ++ 14)

Die Antwort auf beide Beispiele ist also nein, beide erfordern eine Form der externen Synchronisation.

Sie können natürlich den Wert zweier verschiedener Elemente im Container ändern.

    
___ tag123lockfree ___ Ein Oberbegriff für Methoden und Algorithmen zum Synchronisieren von Multithread-Umgebungen oder anderen Formen verteilter Systeme ohne Verwendung von Sperren. ___ tag123c ___ C ++ ist eine universelle Programmiersprache. Es wurde ursprünglich als Erweiterung von C entworfen und behält eine ähnliche Syntax, ist aber jetzt eine komplett andere Sprache. Verwenden Sie dieses Tag für Fragen zu Code, der mit einem C ++ - Compiler kompiliert werden soll. ___ answer31131915 ___

C ++ 11 sagt Folgendes über die Thread-Sicherheit von Containern in der Standardbibliothek:

  

23.2.2 Containerdatenrassen [container.requirements.dataraces]

     

Zum Zweck der Vermeidung von Datenrennen (17.6.5.9) müssen Implementierungen   Betrachte die folgenden Funktionen als const: %code% , %code% ,    %code% , %code% , %code% , %code% , %code% , %code% , %code% ,    %code% , %code% , %code% und, außer in assoziativen oder   ungeordnete assoziative Container, %code% .

     

Ungeachtet (17.6.5.9) sind Implementierungen erforderlich, um Daten zu vermeiden   Rennen, wenn der Inhalt des enthaltenen Objekts in verschiedenen Elementen   in der gleichen Reihenfolge, mit Ausnahme von %code% , werden geändert   gleichzeitig.

Das Lesen von einem Container aus mehreren Threads ist also in Ordnung, und das Modifizieren von Elementen, die sich bereits im Container befinden, ist in Ordnung (solange sie verschiedene Elemente sind).

Daher ist keine der beiden spezifischeren Fragen für %code% threadsicher:

1) Zwei Threads, die in den Vektor eingefügt werden, modifizieren den Vektor selbst - keine existierenden separaten Elemente.

2) Das Löschen eines Threads und anderes Gehen, um auf dasselbe Element zuzugreifen, ist nicht sicher, da das Löschen eines Elements aus dem Vektor keine Operation ist, die threadsicher ist (oder "frei von Datenrennen" wie der Standard) setzt es).

Um diese Operationen sicher ausführen zu können, muss das Programm eine externe Synchronisation selbst vornehmen.

    
___
1
Antwort

Platzsparende probabilistische Datenstrukturen für den Abruf von Zahlen

Stellen Sie sich vor, wir haben einen Algorithmus, der einen hypothetisch langen Schlüsselstrom erhält. Es erzeugt dann einen Wert zwischen 0 und 1 für jeden Schlüssel, wie wir ihn verarbeiten, für den späteren Abruf. Der Eingabesatz ist groß ge...
12.11.2015, 21:01
3
Antworten

kd-tree vs octree für die Suche im 3d-Radius

Ich versuche herauszufinden, welche Struktur für die Suche nach Punkten, einem kd-Baum oder einem Octree besser geeignet wäre. Es wurde bereits erwähnt in diese Frage , aber es gab keine Antwort. Es scheint mir, dass, da Octrees feste Größen fü...
01.08.2013, 15:20
2
Antworten

Kleinster Bereich, der mindestens eine Zahl aus jeder der k Listen enthält

Sie haben k Listen sortierter Ganzzahlen. Suchen Sie den kleinsten Bereich, der mindestens eine Zahl aus jeder der k -Listen enthält. Zum Beispiel %Vor% Der kleinste Bereich hier wäre [14, 18] , da er 14 von list 1 , 15 vo...
15.01.2014, 10:19
4
Antworten

Speichern von Funktionen im Dictionary [Python]

Ich baue gerade eine Anwendung, wo ich über eine Reihe von Schritten, die weitgehend die gleiche Sache machen, iterieren müssen, eine sehr kleine Menge an Code (~ 15 Zeilen) speichern. Die Anzahl der Schritte hängt davon ab, wie das Projekt konf...
24.03.2015, 23:47
7
Antworten

Wörter in einer fortlaufenden Zeichenfolge analysieren

Wenn ich eine Zeichenfolge mit Wörtern und ohne Leerzeichen habe, wie soll ich diese Wörter parsen, wenn ich ein Wörterbuch / eine Liste mit diesen Wörtern habe? Wenn meine Zeichenfolge beispielsweise "thisastringwithwords" lautet, wie könnte...
20.06.2011, 07:54
3
Antworten

Warum hat die Warteschlange mit der maximalen Priorität nicht DECREASE-KEY?

Bei der Erörterung der Heap-Datenstruktur, beispielsweise in CLRS , benötigt die Warteschlange für die maximale Priorität nur INSERT, MAXIMUM , EXTRACT-MAX und INCREASE-KEY. Aber warum hat es nicht auch DECREASE-KEY, dessen Operation wird auch...
09.11.2011, 19:43
2
Antworten

Welche Möglichkeiten hat Go, Daten einfach in Bytes oder Strings umzuwandeln?

Ich habe einige Apps mit dem Google App Engine Go SDK entwickelt, die Memcache als Puffer zum Laden von Daten aus dem Datenspeicher verwenden. Da das Memcache nur Daten als []byte speichern kann, finde ich oft Funktionen, um die verschiedenen...
10.07.2012, 19:12
4
Antworten

Datenstruktur für die Behandlung geschlossener Intervalle

Ich lernte für den Test, als ich ein Problem entdeckte, mit dem ich nicht umgehen kann:    Entwerfen Sie eine Datenstruktur für die Behandlung (geschlossener) Intervalle, die     bietet drei Operationen:       Einfügen (x, y) - Intervall hin...
11.12.2012, 22:19
3
Antworten

Erstellen eines generischen Parsers zum Konvertieren einer Textdatei in eine Datenstruktur in C #

Ich habe eine Definition für eine SPAN-Datei ( Ссылка ), die ich gerne verwenden würde Konstruieren eines Parsers zum Analysieren der Zeichenfolgendaten in eine In-Memory-Auflistungsklasse (oder sogar Verwenden einer Lazy-Evaluierung mit dem Yie...
18.08.2010, 19:57
2
Antworten

Räumlicher Index für Geo-Koordinaten?

Welche Art von Datenstruktur könnte für eine effiziente Nearest-Neighbor-Suche in einer großen Menge von Geo-Koordinaten verwendet werden? Bei "normalen" räumlichen Indexstrukturen wie R-Trees, die planare Koordinaten annehmen, sehe ich zwei Pro...
08.03.2010, 02:25