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.

    
___
12
Antworten

Gibt es eine Datenstruktur, die Datensätze in .NET enthält?

Ich suche nach einer Datenstruktur ähnlich einem Wörterbuch, das die Menge aller verwandten Elemente an einen Schlüssel zurückgibt. Zum Beispiel würde ich es so verwenden: %Vor% In diesem Fall wäre alternateNames1 ein Array mit "Liz" und...
09.02.2010, 23:20
0
Antworten

Anzeige nichtlinearer Datenstruktur wie Baum in Android View [geschlossen]

Ich möchte eine Baumansicht in meine Anwendung mit Datenstruktur wie unten Bild integrieren. Meine Anwendungsdaten sind dynamisch und stammen aus der SQLite-Datenbank. Irgendeine Idee, wie ich das erreichen kann?     
24.07.2015, 04:39
0
Antworten

Was sind die robustesten und interaktivsten Möglichkeiten, allgemeine 2D / 3D / ND-Datensätze in Python zu strukturieren? [geschlossen]

Ich bin ein Wissenschaftler, der kürzlich von MATLAB zu Python konvertiert wurde. Ich suche nach Möglichkeiten, meine (hauptsächlich 2D und 3D) Datensätze zu strukturieren. Ich habe das Netz ziemlich lange durchsucht, und es scheint mir, dass di...
21.11.2013, 12:13
10
Antworten

Wie soll ich einen dünnen Entscheidungsbaum (Bewegungsliste) in einer Datenbank speichern?

Ich habe lange überlegt, eine KI für ein Brettspiel zu machen, und seit kurzem sammle ich Ressourcen und Algorithmen. Das Spiel ist nicht zufällig und die meiste Zeit, da & lt; 3 Züge für einen Spieler, manchmal gibt es & gt; 20 Züge. Ich möchte...
07.08.2011, 10:15
5
Antworten

finde den Median mit der minimalen Zeit in einem Array

Ich habe ein Array, sagen wir a = { 1,4,5,6,2,23,4,2}; Jetzt muss ich den Median der Array-Position von 2 bis 6 finden (ungerade Gesamtausdrücke), also was ich getan habe, habe ich a[1] auf a[5] in arr[0] auf arr[4] genommen, dann...
16.06.2012, 16:11
4
Antworten

Java: Arrays und Vektoren

Ich bin es gewohnt, mit PHP zu arbeiten, aber in letzter Zeit habe ich mit Java gearbeitet und habe Kopfschmerzen, um das herauszufinden. Ich möchte diese Darstellung in Java speichern: %Vor% Gibt es einen sauberen Weg (d. h. keinen schmutzi...
27.09.2008, 21:03
5
Antworten

Wie kann ich zwei Binärbäume zusammenführen

Ich habe zwei Binärbäume und möchte sie zusammenführen. Meine erste Frage ist, ob wir zwei Binärbäume zusammenführen können und wenn ja, wie effizient ich die Zusammenführungsoperationen durchführen kann und welche verschiedenen Möglichkeiten es...
22.08.2011, 19:22
5
Antworten

Suchen Sie Indizes in zwei Listen basierend auf der Bedingung der Elemente

Sagen wir, ich habe zwei Listen. Sie sind Listen von Bewertungen von Büchern auf einer Skala von -5 bis 5. Ich möchte wissen, wann das Element von list1 >= 1 und das Element2 von list2 == 0 ist, also zum Beispiel. %Vor% list1[1]...
12.04.2012, 17:06
7
Antworten

C # Struct Verwendungstipps?

Ich benutze sehr gerne Strukturen. Nach dem Lesen dieses Artikels , gibt es dann noch weitere Bedenken, die ich gegen die Verwendung dieser Artikel haben sollte? Siehe auch:    Wann sollte ich eine Struktur anstelle von a verwenden?...
12.03.2009, 21:42
3
Antworten

Haskell: Datastruture mit O (1) anhängen und O (1) indexieren?

Ich suche nach einer Datenstruktur in Haskell, die sowohl schnelles Indizieren als auch schnelles Anhängen unterstützt. Dies ist für ein Memo-Problem, das sich aus der Rekursion ergibt. Aus der Art, wie Vektoren in C ++ arbeiten (die veränder...
03.05.2012, 21:51