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.

    
___
1
Antwort

Variadische Vorlagen in Scala emulieren

Angenommen, Sie möchten etwas wie variadische Vorlagen (die Möglichkeit, n Typ-Parameter für eine generische Klasse zu definieren) in Scala. Zum Beispiel möchten Sie nicht Tuple2[+T1, +T2] und Tuple3[+T1, +T2, +T3] definieren, aber...
07.04.2010, 15:01
1
Antwort

Code Ausgabe auf Graph und einige Ansprüche auf lokalen Wettbewerb?

Ich stieß auf eine Frage wie folgt: Wir haben einen Code für den gewichteten, azyklischen Graph G(V, E) mit positiven und negativen Kanten. Wir ändern das Gewicht dieses Graphen mit folgendem Code, um eine G ohne negative Kante (G')...
06.05.2015, 09:54
2
Antworten

Finde die Anzahl der Paare, bei denen das erste Element durch ein zweites Element teilbar ist

Angenommen, einige Zahlen gegeben %Vor% Sie müssen alle Paare finden (a, b) wobei a in der Liste vor b und a%b = 0 erscheint. Hier sind solche Paare: %Vor% Gibt es einen besseren Algorithmus als O (n 2 ) ? ?     
17.08.2015, 06:28
2
Antworten

Wie sucht OEIS nach der Suche?

Die Online Encyclopedia of Integer Sequences unterstützt die Suche nach Sequenzen, die Ihre Abfrage als Untersequenz enthalten, z. Suche nach subseq:212,364,420,428 gibt die 8*n+4 Sequenz zurück. ( Ссылка ) Diese erstaunliche Funktion w...
16.08.2014, 13:51
2
Antworten

Segmentierungsfehler beim Zugriff auf eine funktionsstatische Struktur über den zurückgegebenen Zeiger

Ich habe folgende Struktur: %Vor% Ich habe auch eine Funktion in einer statischen Bibliothek definiert (nennen wir es A.lib): %Vor% Ich habe dann ein Programm (nennen wir es B) und eine dynamische Bibliothek (nennen wir es C). Sowohl B a...
12.09.2011, 16:10
1
Antwort

Fragen zur Datenstruktur und zur Algorithmusanalyse

Ich suche nach einer Antwort auf diese Frage, die aus einer Klasse über Datenstrukturen und Algorithmen stammt. Ich habe von der Merge-Sortierung erfahren, erinnere mich aber nicht an Cluster und Puffer. Ich bin mir nicht ganz sicher, ob ich die...
29.11.2010, 02:48
1
Antwort

Partitionen von Werten in einem Fibonacci-Aufrufgraphen (Aufrufgraph ist ein Binärbaum)

Ich habe ein laufendes Projekt, das die Fibonacci-Sequenz untersucht, das ist nur ein persönliches Projekt, ich habe eine binäre tree class erstellt, die einen binären Baum des Fibonacci-Aufrufgraphen erzeugt, also für f(3) erzeuge ich den...
11.03.2012, 01:20
2
Antworten

Wie wird Google Calculator implementiert?

Wenn Sie in Google "100F bis C" suchen, wie kann es von Fahrenheit zu Celsius konvertieren? Ebenso Umrechnung von verschiedenen Währungen und einfache Berechnung. Was ist die verwendete Datenstruktur, oder ist es ein einfaches Muster, das den...
28.03.2010, 17:36
2
Antworten

Gibt es eine Baumstruktur oder einen Algorithmus, um Ebenen in einem Baum zu mischen?

Ich habe was ich denke, ist ein interessantes Problem. Grundsätzlich habe ich eine Liste von Items, wobei jedes Item einen festen Satz von Meta-Daten unterschiedlicher Werte hat. Zum Beispiel: Eintrag 1: {Type="Text", Author="Benutzer...
18.08.2011, 15:46
1
Antwort

Gibt es eine Datenstruktur für DAGs, die effiziente Bearbeitungen unterstützt?

Ich suche nach einer Datenstruktur, die alle DAG speichert, aber effizient (dh sublinear in der Anzahl der Kanten / Scheitelpunkte) erkennen kann, ob das Hinzufügen einer Kante einen Zyklus erzeugen würde (und somit einen Bruch verhindern würde)...
25.10.2011, 17:46