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

Warum hängt die zeitliche Komplexität von DFS und BFS davon ab, wie der Graph dargestellt wird?

Die Seite Ссылка beschreibt, dass wenn eine Adjazenzliste dann verwendet wird DFS und BFS haben Komplexität O (V + E), und wenn eine Adjazenzmatrix verwendet wird, ist die Komplexität O (V 2). Warum ist das?     
29.05.2014, 02:58
6
Antworten

Speicher effizient int-int dict in Python

Ich brauche ein speichereffizientes int-int dict in Python, das die folgenden Operationen in O (log n) -Zeit unterstützt: %Vor% Ich muss ~ 250M Paare halten, also muss wirklich eng sein. Kennen Sie zufällig eine geeignete Implementier...
26.10.2010, 11:34
7
Antworten

Hat Java eine Skip-Listen-Implementierung?

Ich finde ConcurrentSkipListSet im Java Collection Framework , die mit einer Überspringungsliste gesichert ist. Aber gibt es eine Skip-Liste in Java? Ein Set funktioniert in meinem Anwendungsfall nicht. Ich brauche eine indexierbare Liste,...
28.07.2011, 19:02
5
Antworten

So erhöhen Sie alle Werte in einem Array-Intervall um einen bestimmten Betrag

Angenommen, ich habe ein Array A der Länge L. Ich werde n Intervalle (i, j) erhalten und ich muss alle Werte zwischen A [i] und A [j] inkrementieren. Für welche Datenstruktur wäre das am besten geeignet die gegebenen Operationen? Die Intervalle...
23.08.2013, 17:35
2
Antworten

tiefes Kopieren einer Graphenstruktur

Ich habe eine Grafikklasse mit Knoten, wo jeder Knoten sich mit anderen verbinden kann: %Vor% Ich möchte eine vollständige Kopie des gesamten Graphen erstellen. Als ersten Versuch habe ich versucht, einen Kopierkonstruktor wie: zu erstellen...
14.10.2012, 20:06
3
Antworten

Aufeinanderfolgendes Hinzufügen von char, um das längste Wort im Wörterbuch zu erhalten [geschlossen]

Gegeben ein Wörterverzeichnis und ein Anfangszeichen. finde das längste mögliche Wort im Wörterbuch, indem du nacheinander ein Zeichen zum Wort hinzufügst. In jedem gegebenen Fall sollte das Wort ein gültiges Wort im Wörterbuch sein. Beispiel...
28.03.2010, 18:53
3
Antworten

Binärer Baum, der mit einem Array dargestellt wird

Betrachten Sie das folgende Array, das angeblich einen binären Baum darstellt: [1, 2, 5, 6, -1, 8, 11] Da der Index mit dem Wert -1 das Wurzelelement angibt, habe ich folgende Fragen: a) Wie ist das eigentlich dargestellt? Sollen wir...
24.11.2011, 11:20
6
Antworten

Warum ist es wichtig, Arrays zu kennen, wenn wir ArrayLists haben? [geschlossen]

Ich bin neugierig, warum Arrays verwendet werden, wenn Sie stattdessen eine ArrayLists verwenden könnten? Wäre es nicht immer besser, eine ArrayList zu verwenden?     
06.08.2013, 16:12
6
Antworten

mit vielen Intervallen [ai, bi], finde ein Intervall, das sich mit der größten Anzahl von Intervallen überschneidet

Gegeben viele Intervalle [ai, bi], Finde das Intervall, das die meisten Intervalle schneidet. Können wir das in O (nlogn) oder besser machen? Ich kann nur an einen n ^ 2 Ansatz denken.     
12.03.2012, 18:09
7
Antworten

C ++ Datenstruktur mit Lookuptime O (1), wie Java's hashmap in stl?

Gibt es eine solche Struktur in der C ++ - Standardbibliothek? Ich habe keinen Zugang zu etwas anderem, also kann unordered_map in tr1 nicht verwendet werden (und boost etc). Was ich habe, ist eine große Anzahl von benutzerdefinierten Klassen...
28.06.2009, 16:36