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

Warteschlange mit zeitgestempelten Elementen innerhalb eines Zeitraums

Ich möchte in einer Warteschlange speichern, Datenstruktur spielt keine Rolle, nur die Elemente, die ich eingefügt habe, sagen die letzten 5 Minuten von der aktuellen Zeit. Alles, was älter ist, sollte entfernt werden - so dass jedes Mal, wenn i...
11.07.2011, 00:32
1
Antwort

Das Überschreiben von .init im benutzerdefinierten Typ in D

Ich erinnere mich, irgendwo gelesen zu haben, dass es möglich ist, die .init-Eigenschaft von benutzerdefinierten Typen in D zu überschreiben. Ich würde dies gern für eine Struktur tun, die ich erstellt habe, aber ich finde keinen Weg, dies zu tu...
09.06.2011, 21:48
3
Antworten

Effiziente Datenstruktur von Objekten in Python zum Nachschlagen basierend auf einer beliebigen Objektelementvariablen

Ich muss Objekte speichern, die eine Zahl (& gt; 2) von Integer-Elementvariablen haben, und schnelle Suchvorgänge unter Verwendung beliebiger Elementvariablen als Suchschlüssel durchführen. Zur einfacheren Darstellung sagen wir, die Objekte s...
22.05.2011, 23:35
3
Antworten

Gibt es eine elegante Möglichkeit, eine Struktur auf ein einfaches Array zu reduzieren?

Dies ist eine typische Array-Struktur : %Vor% Hier ist ein nicht eleganter Weg (oder "nicht so eleganter Weg"), das große Array auf ein einfaches Array zu reduzieren, das nur eine Spalte enthält: %Vor% Das funktioniert, aber ist es mögl...
22.03.2015, 22:02
2
Antworten

Welche Datenstruktur verwende ich hier?

Ich habe viele Instanzen, zwei Klassen Children und Animal , die eine viele-zu-viele Entity-Beziehung haben. Ich möchte eine Datenstruktur haben, so dass ich mit Children eine Liste von Animal bekommen kann, die darauf abgebildet...
18.03.2013, 13:05
2
Antworten

Gibt es einen Ersatz für Java Stack, der nicht synchronisiert ist?

Ich habe eine große Codebase (von mir geschrieben), die die Stack-Datenstruktur verwendet. Dies wurde aus Gründen der Bequemlichkeit verwendet und ich benutze es manchmal als Stack oder manchmal als Vector / List. Nach einer Leistungsüberprüf...
16.02.2011, 09:46
5
Antworten

Wie implementiere ich einen Bipartite Graph in Java?

AKTUALISIEREN Einige Antworten haben bisher vorgeschlagen, eine Adjazenzliste zu verwenden. Wie würde eine Adjazenzliste in Java aussehen? ... keine Zeiger richtig:) Ich versuche, einen Bipartite-Graph in Java zu implementieren, um Inform...
03.08.2010, 18:03
5
Antworten

Entferne ein Element aus der Mitte eines std :: heaps

Ich verwende eine Prioritätswarteschlange als Scheduler mit einer zusätzlichen Anforderung. Ich muss geplante Artikel stornieren können. Dies entspricht dem Entfernen eines Elements aus der Mitte der Prioritätswarteschlange. Ich kann std::pr...
19.01.2011, 17:17
3
Antworten

Semantische (oder symbolische) Darstellung von Musik

Ich möchte eine kleine App erstellen, die es dem Benutzer erlaubt, klassische Musik (hauptsächlich) zu visualisieren und zu steuern, um Strukturen wie Kanon besser zu erkennen. Was wäre eine geeignete Daten- und Dateistruktur zum Speichern der M...
31.12.2009, 22:43
3
Antworten

Beispiel für die Verwendung von scala.collection.immutable.Set von Java

Kennt jemand da draußen, der mit Scala vertraut ist, dass ich verwenden kann? scala.collection.immutable.Set von Java? Ich kann vage das Scaladoc lesen, bin mir aber nicht sicher, wie ich Scala-Methoden wie "-" aus Java aufrufen soll (ich nehm...
11.06.2010, 18:31