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.

    
___
3
Antworten

Wie erstelle ich einen Heap?

Angenommen, ich habe einen Haufen wie den folgenden: %Vor% Nun möchte ich einen weiteren Gegenstand 55 in diesen Haufen einfügen. Wie geht das? Option 1. %Vor% Option 2. %Vor% Option 3. %Vor% Was ist der richtige Schritt? U...
26.06.2011, 03:54
5
Antworten

Beste Datenstruktur für den nächsten Nachbarn in 1 Dimension

Ich habe eine Liste von Werten (1-dimensional) und ich würde gerne die beste Datenstruktur / Algorithmus zum Finden der nächsten zu einem Abfragewert, den ich habe, kennen. Die meisten Lösungen (alle?), Die ich für Fragen hier gefunden habe, sin...
18.07.2010, 18:07
4
Antworten

Ist ein kd-tree für 4D Raum-Zeit-Daten (x, y, z, time) geeignet?

Ich möchte eine Datenstruktur zum Sortieren von Raum-Zeit-Daten (x, y, z, Zeit) verwenden. Gegenwärtig sucht ein Verarbeitungsalgorithmus eine Menge von 4D-Punkten (x, y, z, Zeit) mit einem sphärischen (3d) räumlichen Radius und einem lineare...
25.04.2009, 01:01
4
Antworten

C ++ - Header-Dateien in Python konvertieren

Ich habe einen C ++ - Header, der #define-Anweisungen, Enums und Strukturen enthält. Ich habe versucht, das h2py.py-Skript, das mit Python enthalten ist, vergeblich zu verwenden (außer mir die konvertierten #defines zu geben). Jede Hilfe würde s...
17.12.2008, 10:53
4
Antworten

Geben Sie n Tupel, die Paare darstellen, eine Liste mit verbundenen Tupeln zurück

Geben Sie n Tupel an und schreiben Sie eine Funktion, die eine Liste mit verbundenen Werten zurückgibt. Beispiel: %Vor% Ergebnis: %Vor% Ich glaube, es könnte mit Hilfe von Graphen oder Bäumen als Datenstruktur gelöst werden, indem Kno...
11.03.2015, 07:26
2
Antworten

Gemeinsam genutzte Zeiger löschen rekursive Datenstrukturen rekursiv und der Stapel überläuft

Ich habe mehrere lange verkettete Listen (sie haben bis zu 20.000 Artikel). Sie haben unterschiedliche Anfänge, können aber von einem Knoten an auf den gleichen Knoten zeigen. Ich habe beschlossen, eine solche verknüpfte Liste zusammenwachsen zu...
23.07.2013, 07:42
4
Antworten

Bedingte Datenmanipulation in Mathematica

Ich versuche, die besten Tools für eine effiziente Datenanalyse in Mathematica vorzubereiten. Ich habe ungefähr 300 Spalten & amp; 100 000 Zeilen. Was wären die besten Tricks für: "Entfernen", "Extrahieren" oder einfach "Betrachte" Teile...
25.05.2011, 20:10
3
Antworten

MySQL-Datenbankdatentyp

Ich bin neu in der Datenbankprogrammierung und habe eine sehr grundlegende Frage: Was bedeutet es in meiner PHPMyAdmin-GUI, die ich benutze, um Tabellen in meiner Datenbank zu erstellen, wenn die Spalte "type" (dh Datentyp) den Datentyp und e...
30.07.2011, 20:17
3
Antworten

QMap und QPair, C ++, Qt

Ich möchte eine Datenstruktur für den Zugriff auf Strings auf zwei Arten erstellen: Zugriff nach ID Zugriff nach Namen Meine erste Idee verwendet zwei Karten für jede Methode, aber es führt zu einer Duplizierung der Daten: %Vor% Ich...
04.10.2011, 09:38
4
Antworten

Was wäre ein sinnvoller Weg, ein Trie in .NET zu implementieren?

Ich bekomme das Konzept hinter trie . Aber ich bin ein wenig verwirrt, wenn es um die Umsetzung geht. Der offensichtlichste Weg, um einen Trie -Typ zu strukturieren, wäre, wenn ein Trie einen internen Dictionary<char, Trie>...
08.09.2010, 06:59