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

ArrayBlockingQueue und add vs vs vs Kapazität

Aus Javadoc von ArrayBlockingQueue ArrayBlockingQueue :    hinzufügen       public boolean add (E e) %Vor% Ich habe diese Aussage (den Teil if it is possible to do so immediattely ) immer wie folgt interpretiert:    Wenn die Wa...
09.10.2011, 21:27
2
Antworten

Was ist eine B-Baum-Seite?

Ich denke, ich weiß, was ein B-Baum ist, aber was ist eine B-Baum-Seite?     
23.03.2010, 18:22
7
Antworten

Anzahl der Ganzzahlen in einer Liste, die größer als eine gegebene Ganzzahl ist, möglicherweise nicht in der Liste in der Protokollierungszeit

Angesichts einer ungeordneten Liste von n nichtnegativen ganzen Zahlen (ohne Garantien für Verteilung oder Wiederholung) möchte ich eine ganze Zahl erhalten, die möglicherweise nicht in der Liste ist, und mit der Anzahl der ganzen Zahlen antwort...
31.10.2015, 02:06
6
Antworten

Gibt es eine Queue / FIFO-Datenstruktur für das iPhone?

Bevor ich meine eigene Warteschlange mit NSMutableArray verwalte, möchte ich wissen, ob etwas mehr Standard verfügbar ist. Ich sehe nichts in den Apple-Dokumenten, aber ich bin überrascht, wenn es keine Queue-Implementierung von irgendwo gi...
09.07.2009, 13:51
1
Antwort

Was sind Satelliteninformationen in Datenstrukturen?

Aus der Einführung in Algorithmen von Thomas Cormen: " Um die Dinge einfach zu halten, nehmen wir an, wie wir es für binäre Suchbäume und rot-schwarz haben Bäume, dass jede "Satelliteninformation", die einem Schlüssel zugeordnet ist, in demse...
27.01.2013, 20:25
2
Antworten

effiziente funktionelle Datenstruktur für endliche Bijektionen

Ich suche nach einer funktionellen Datenstruktur, die endliche Bijektionen zwischen zwei Typen darstellt, das ist platzsparend und zeiteffizient. Zum Beispiel würde ich mich freuen, wenn ich eine Bijektion f der Größe n in Betracht ziehe:...
19.05.2012, 22:14
2
Antworten

Konvertierung der YAML-Datei in Python-Dict

Ich habe das folgende Problem der Zuordnung von Dokumenten innerhalb einer YAML-Datei zu einem dict und ordne sie korrekt zu. Ich habe die folgende YAML-Datei, die einen Server darstellt ( db.yml ): %Vor% Ich lade diese YAML-Datei, w...
22.10.2012, 20:51
1
Antwort

Warum enthält die Standardbibliothek für C ++ keine Hashtabellenimplementierungen?

Ich habe mein Textbuch Data Structures and Algorithms: By Mark Allen Weiss gelesen und es heißt, dass die Standardbibliothek keine Hashtabellenimplementierungen eines Sets oder einer Map enthält, sondern Compiler hash_set und hash_map mit den...
30.07.2011, 03:27
6
Antworten

So erreichen Sie den MapString, Listenstruktur [geschlossen]

Ich habe Daten wie unten: %Vor% (Jede Zeile der obigen Daten ist ein Objekt mit den Feldern "key" und "value", alle in einer Liste List<DataObject> ) Ich möchte die Daten zu einem Map<String, List<String>> wie fol...
07.06.2012, 08:07
3
Antworten

Speichern einer großen Anzahl von Dateien im Dateisystem

Ich habe Millionen von Audiodateien , die basierend auf GUId ( Ссылка ) generiert wurden. Wie kann ich diese Dateien im Dateisystem speichern, so dass ich effizient weitere Dateien hinzufügen im selben Dateisystem und effizient für eine bes...
16.10.2009, 05:42