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.

    
___
2
Antworten

Anpassen eines Segments in einer zweidimensionalen Ebene

Ich habe Probleme mit dem folgenden Problem    Gegebene N x S Segmente und m Segmente parallel zur horizontalen Achse (alle sind Tupel (x ', x' ', y) ), beantworte Q Online-Abfragen der Form (x ', x' ') . Die Antwort auf eine solche A...
05.11.2017, 12:43
1
Antwort

Wie VIM Autocomplete funktioniert

Ich ging über VIM-Shortcuts & amp; habe das STRG + p gefunden, das unter UNIX als Autocomplete funktioniert (du weißt, was ich sage, eine Dropdown-Liste der möglichen Wörter, sortiert nach Nutzungshäufigkeit). Es scheint sogar die am unmittelb...
13.09.2010, 10:18
3
Antworten

Mehrfachspaltenstruktur Java

In C # gibt es einen DataTable-Typ, mit dem mehrspaltige Strukturen erzeugt werden können. In Java kann ich geschachtelte Hashmaps verwenden, aber seine zu komplizierte Struktur, selbst wenn Sie 3 Spalten haben. Unterstützt Core-Java eine solche...
03.10.2012, 20:56
1
Antwort

Gibt es einen Namen für diese Sammlung von sortierten Datenstrukturen?

Gibt es einen Namen für die folgende Datenstruktur? Gibt es Papiere und Zitate? Eine Möglichkeit, einen effizienten abstrakten Datentypen zu implementieren, ist es haben eine Sammlung von sortierten Arrays, wobei jedes Array eine einzigar...
07.06.2013, 04:06
9
Antworten

Einen Baum vertikal drucken

Um zu verstehen, was die gleiche vertikale Linie ist, müssen wir zuerst horizontale Abstände definieren. Wenn zwei Knoten denselben horizontalen Abstand (HD) haben, befinden sie sich auf derselben vertikalen Linie. Die Idee von HD ist einfach. H...
11.12.2013, 13:59
2
Antworten

Suche nach einem optimalen Weg, Konstruktoren von Strukturen mit überlappenden Feldern zu behandeln

Ich habe eine benutzerdefinierte Struktur für die Verarbeitung von RGBA-Werten erstellt, die zur GPU gemarshallt werden. In meinem Typ halte ich einzelne R-, G-, B- und A-Komponenten als Byte-Werte und überlappe eine 32-Bit-Ganzzahl ohne Vorz...
01.08.2014, 21:58
3
Antworten

graph - Was sind die Unterschiede zwischen Embedded und Topological in Graph?

Im Algorithm Design Manual , Seite 178 werden einige Eigenschaften von Graph beschrieben, und einer davon ist eingebettet und topologisch:    Eingebettet vs. topologisch       Ein Graph ist eingebettet, wenn die Scheitelpunkte und   Kanten...
04.04.2012, 11:31
8
Antworten

Suchen Sie das kleinste Fenster des Eingabearrays, das alle Elemente des Abfragearrays enthält

Problem: Bei einem Eingabearray mit Ganzzahlen der Größe n und einem Abfragearray mit Ganzzahlen der Größe k finde das kleinste Fenster des Eingabearrays, das alle Elemente des Abfragearrays enthält und auch in der gleichen Reihenfolge. > Ich...
19.09.2010, 05:16
1
Antwort

So verstehen Sie segmentierte Binomialhaufen, die in Reinfunktionalen Datenstrukturen beschrieben sind

In Kapitel 6.3.1 der Arbeit Reinfunktionale Datenstrukturen heißt es:    Dann, wenn wir einen neuen Baum aus einem neuen Element und einem Segment erstellen   von Bäumen der Ränge 0 ... r-1 vergleichen wir einfach das neue Element mit dem  ...
23.11.2011, 05:50
3
Antworten

Optimale Speicherung der Datenstruktur für schnelle Suche und Persistenz

Szenario Ich habe die folgenden Methoden: %Vor% Zunächst denke ich über das Speichern auf dem Formular nach: %Vor% und %Vor% AddItemSecurity basiert darauf, wie ich Daten von einer Drittanbieter-API erhalte, GetValidItemIds...
30.03.2010, 14:13