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

Zipper-Datenstruktur für den grafischen Modelleditor

Ich schreibe einen grafischen Editor für ein "Modell" (d. h. eine Sammlung von Kästchen und Zeilen mit irgendeiner Art von Semantik wie UML, deren Details hier keine Rolle spielen). Ich möchte also eine Datenstruktur, die das Modell darstellt, u...
09.09.2012, 14:12
3
Antworten

Was ist die beste C # Datenstruktur für die folgende Situation?

Die Anforderungen für meine Anwendung sind wie folgt. Ich muss Aufträge speichern, die wie folgt aussehen: Jede Bestellung bezieht sich auf einen bestimmten Stockcode (String) und hat einen Preis, ein Volumen und ob sie gekauft oder verkauf...
13.04.2012, 23:12
3
Antworten

Muster, um strukturierte Differenzen und Statistiken von Objekten zu erhalten oder um Diff-Werkzeuge zu erzeugen

Sagen wir, ich habe eine solche Struktur %Vor% Also enthält die Klasse Form die Liste der Felder, sagen wir, dass das Feld selbst mit einer solchen Struktur dargestellt wird %Vor% Die Field ist im Grunde eine zusammengesetzte Struk...
19.12.2012, 15:27
3
Antworten

Was ist der schnellste Weg, um spärliche boolesche Matrizen darzustellen und zu multiplizieren?

Also verwende ich boolesche Matrizen, deren Dimension in der Regel ein paar Dutzend bis ein paar hundert ist, sie sind normalerweise ziemlich spärlich (nur ein paar 2-4 Nicht-Nullen in den meisten Zeilen und Spalten) und meine Laufzeit wird star...
05.09.2010, 13:51
2
Antworten

Dynamische Ordnungsstatistik: Erhalten Sie k-tes Element in konstanter Zeit?

Ich versuche also, eine Datenstruktur zu implementieren, um die dynamische Ordnungsstatistik zu verarbeiten. Die Datenstruktur hat folgende Operationen: add (x): fügt ein neues Element mit dem Wert x ein get (k): gibt das k-te kleinste Ele...
06.01.2018, 16:30
3
Antworten

Struktur mit mehreren untergeordneten Knoten und dem nächsten Knoten

Ich möchte einen Baum mit den folgenden Eigenschaften erstellen: Jeder Knoten kann 1 "next node" haben. Jeder Knoten kann mehrere untergeordnete Knoten haben. Die Anzahl der untergeordneten Knoten kann von Knoten zu Knoten variieren I...
17.06.2011, 07:19
2
Antworten

Ein Wörterbuch mit einem eindeutigen möglichen Wert für jeden Schlüssel?

Ich muss eine Karte von den Twitter-Status-IDs zu ihrer Autoren-ID erstellen. Offensichtlich hat jeder Status genau einen Autor. Ich habe erwartet, dass Python-Sammlungen etwas wie die uniqdict -Klasse haben, für die d[key] = value au...
07.06.2017, 18:17
1
Antwort

Beste Datenstruktur für ein unveränderliches persistentes 3D-Raster

Ich experimentiere mit dem Schreiben eines Spiels in einem funktionalen Programmierstil, was bedeutet, den Spielzustand mit einer rein funktionalen, unveränderlichen Datenstruktur darzustellen. Eine der wichtigsten Datenstrukturen wäre ein 3D...
25.09.2011, 05:18
3
Antworten

Wie man Zeilen in einem kd-Baum am besten speichert

Ich weiß, dass kd-Bäume traditionell zum Speichern von Punkten verwendet werden, aber ich möchte stattdessen Zeilen speichern. Wäre es am besten, die Linie an jeder Kreuzung mit der Aufspaltung des kd-Baums zu teilen? oder würden nur die Endpunk...
28.10.2010, 23:20
2
Antworten

Ein bestelltes Wörterbuch, das die Sink-Taste unterstützt?

Viele schnelle Prioritätswarteschlangen (wie der Fibonacci-Heap und Pairing-Heap ) unterstützt eine" sineze-key "-Operation, die ein bereits in der Prioritätswarteschlange gespeichertes Element übernimmt und dessen Priorität effizient verring...
05.01.2013, 19:17