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.

    
___
5
Antworten

Was ist der Unterschied zwischen einem gerichteten und ungerichteten Graphen?

Was ist der Unterschied zwischen diesen fundamentalen Typen? In Zeichnungen sehe ich, dass das Gerichtete Pfeile hat, aber was genau bedeutet das mit diesen Pfeilen im gerichteten Graphen und das Fehlen davon im ungerichteten Graphen?     
30.05.2014, 14:02
4
Antworten

Paralleler Algorithmus zum Konstruieren eines Trie?

Da die Trie-Datenstruktur einen so großen Verzweigungsfaktor hat und jeder Teilbaum völlig unabhängig von den anderen ist, scheint es einen Weg zu geben, die Konstruktion für ein gegebenes Wörterbuch enorm zu beschleunigen, indem alle Wörter par...
15.01.2013, 16:42
7
Antworten

Schnellere Datenstruktur zum Suchen eines Strings

Ich habe diesen Code, der bestimmt, ob ein Wort (ohne Berücksichtigung des Falls) in einer WordList-Textdatei enthalten ist. Die WordList-Textdatei kann jedoch 65000 ++ Zeilen haben, und um nur ein Wort unter Verwendung meiner Implementierung un...
05.03.2011, 02:28
4
Antworten

Datenstruktur für eine zufällige Welt

Also habe ich darüber nachgedacht, einen einfachen zufälligen Weltgenerator zu machen. Dieser Generator würde eine Startzelle erstellen, die zwischen einem und vier zufälligen Ausgängen (in den Hauptrichtungen, so etwas wie ein Labyrinth) hätte....
22.10.2010, 16:55
2
Antworten

Unterschied zwischen () und [] in Perl 6

Ich lerne Perl 6 und hatte Schwierigkeiten, den Perl 6 One-Liner unter zu verstehen Mein Perl 6 ist rakudo-star: stable 2014.04 (bottled) Das funktioniert gut. Das Array / die Liste ist sortiert %Vor% Aber das Array / die Liste wird...
11.06.2014, 10:22
2
Antworten

Warum werden Skip-Listen gegenüber B + -Bäumen für Datenbanken nicht bevorzugt?

Ich habe gerade über Skip-Listen und MemSQL gelesen und mich gefragt, warum Skip-Listen in Datenbanken nicht häufiger verwendet werden? Gibt es große Nachteile für die Verwendung von Skip-Listen?     
17.02.2014, 12:14
4
Antworten

Wann sollte Binomial-Heap verwendet werden?

Binomial Heap hat ein ganz besonderes Design. Persönlich glaube ich nicht, dass dieses Design intuitiv ist. Obwohl Beiträge wie Was ist der Unterschied zwischen Binäre Haufen und Binomialhaufen? spricht über diff und seine Spezialität, i...
20.11.2013, 12:32
3
Antworten

C compiling - "undefinierter Bezug auf"?

Ich mache ein zuverlässiges Datenübertragungsprotokoll und habe den Funktionsprototyp %Vor% Mit dem structs %Vor% Und wenn ich die Funktion in diesem Format anrufe: %Vor% Wo A ist int und packet.payload ist struct pkt ,...
16.10.2013, 01:14
6
Antworten

Wie pflege ich Wörterbuch in einem Heap in Python?

Ich habe ein Wörterbuch wie folgt: %Vor% Es ist ein Wörterbuch mit Schlüsseln als Name einer Entität und der Wert ist die Zählung dieser Entität. Ich muss die Top 10 Elemente aus dem Wörterbuch zurückgeben. Ich kann einen Heap schreiben,...
10.02.2013, 06:30
2
Antworten

Scala variadic Funktionen und Seq

Soweit ich weiß, werden Eigenschaften wie List oder Seq in der Scala-Standardbibliothek implementiert, anstatt Teil der Sprache selbst zu sein. Es gibt jedoch eine Sache, die ich nicht verstehe: Man hat eine Syntax für variadische Funkt...
13.08.2012, 09:51