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

Heuristiken zur Abschätzung der Effizienz von reduzierten binären Entscheidungsdiagrammen?

Reduzierte binäre Entscheidungsdiagramme (ROBDD) sind eine effiziente Datenstruktur für Boolesche Funktionen mehrerer Variablen f(x1,x2,...,xn) . Ich würde gerne eine Intuition für wie effizient sie sind. Wir wissen zum Beispiel, dass D...
15.08.2010, 20:29
2
Antworten

B-Tree - Warum kann es keinen Knoten mit einer geraden Anzahl von Schlüsseln geben?

Ich versuche, einen B-Tree gemäß dem Kapitel "B-Trees" in "Einführung in Algorithmen" zu implementieren. Was ich nicht ganz verstehe, ist der "minimale Abschluss". In dem Buch wird angegeben, dass der Grad eine Zahl ist, die die untere / o...
18.08.2010, 21:40
1
Antwort

Wie kann ich die Komplexität einer Funktion verbessern, die eine Liste für jeden Punkt sortiert?

Die folgende Funktion: %Vor% Ordnet jeden Punkt P einer Liste einer Liste von Punkten zu, die nach ihrer Entfernung zu P geordnet sind. So ist beispielsweise sortByDist [a, b, c, d] Map.! b die Liste [b, a, c, d], wenn a der nächste Pu...
02.03.2015, 08:08
3
Antworten

Binärraum-Partitionierungsdatenstruktur für Donut-2D-Raum

Ich habe eine 2D-Karte, die an den Rändern umschlingt. Wenn Sie sich also von der rechten Seite entfernen, werden Sie wieder auf der linken Seite der Karte angezeigt. Ebenso mit den drei anderen Kanten. Dies ist ein Problem für den KDTree, mi...
06.11.2011, 01:08
3
Antworten

Minimierung der gewichteten Summe

Ich bin in letzter Zeit auf dieses Problem gestoßen. Angenommen, es gibt n Punkte auf der x-Achse, x [0], x [1] .. x [n-1]. Das mit jedem dieser Punkte assoziierte Gewicht sei w [0], w [1] .. w [n-1]. Ausgehend von einem beliebigen Punkt zwische...
19.02.2014, 09:13
1
Antwort

Ein Ganzzahl-Array in zwei gleich große Sub-Arrays aufteilen?

Ich bin auf diese Frage gestoßen und konnte keine vernünftige Lösung finden. Wie würden Sie ein unsortiertes Integer-Array in 2 gleich große Sub-Arrays aufteilen, so dass die Differenz zwischen den Sub-Array-Summen minimal ist. Beispiel: Bei...
29.01.2013, 17:21
2
Antworten

Welche Best Practices für das Benchmarking verschiedener Java-Sammlungen gibt es?

Ich habe einige interessante Java-Sammlungen in meiner Hand wie: Ссылка Java 7 Java 7 gleichzeitige Sammlungen Scala-Sammlungen Eigengewachsene Kollektionen, die wir in einer Firma haben Ich frage mich, was die besten Praktiken...
03.08.2011, 19:47
6
Antworten

Wie dokumentiert man Strukturen in Python?

Wenn erwartet wird, dass ein Argument für eine Funktion eine bestimmte (oder äquivalente) Struktur ist, die mit list , tuple und dict von python, wie und wo sollte es dokumentiert werden? Ein Beispiel Dokumentation : %Vor% Ei...
07.02.2013, 17:39
2
Antworten

Schnelle räumliche Datenstruktur für die Nearest-Neighbor-Suche in Hyperspheres mit ungleichmäßiger Größe

Da ein k-dimensionaler kontinuierlicher (euklidischer) Raum mit ziemlich unvorhersehbar sich bewegenden / wachsenden / schrumpfenden Hypersphären gefüllt ist, muss ich wiederholt die Hyperkugel finden, deren Oberfläche einer gegebenen Koordinate...
04.06.2012, 09:07
3
Antworten

Ändern Sie die Priorität in einer benutzerdefinierten Prioritätswarteschlange

Ich habe die Anweisungen in diese Frage (die Antwort von Jason) befolgt schreibe meine PriorityQueue<T> mit einem SortedList . Ich verstehe, dass das Feld count innerhalb dieser Klasse verwendet wird, um eindeutige Prioritäten si...
10.02.2012, 18:07