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.

    
___
12
Antworten

Wann wird die StackT-Sammlung in C # verwendet?

Ich verstehe, wie Stack() und Stack<T> funktioniert, aber ich kann wirklich keine Szenarien sehen, in denen ein Array, List<T> oder IEnumerable<T> , keine bessere und einfachere Wahl ist. Kann mir jemand ein Beisp...
06.01.2012, 22:37
6
Antworten

Suche in C ++ - Standardvektor von Strukturen für Struktur mit übereinstimmender Zeichenkette

Ich bin mir sicher, dass ich das härter mache, als es sein muss. Ich habe einen Vektor ... %Vor% ... besteht aus Strukturen, die nach dem Folgenden strukturiert sind: %Vor% Ich versuche, mJointsVector mit "std :: find" zu suchen, um e...
08.01.2010, 06:42
2
Antworten

C # Liste, wo Elemente eine TTL haben

Aus einem einfachen Beispiel möchte ich eine Liste mit Strings haben. Jedes Element in der Liste sollte 5 Minuten nach dem Hinzufügen zur Liste "ablaufen". Obwohl es keine einfache, integrierte Möglichkeit dafür gibt, würde ich gerne mit einer D...
15.09.2011, 18:43
5
Antworten

Gibt es eine Möglichkeit, ein String Array mit zwei Elementen zu definieren?

Ich möchte ein zweidimensionales Array von Strings erstellen, bei dem die Länge einer Dimension 2 ist. Ähnlich wie bei %Vor% Machen %Vor% gibt mir %Vor% aber nicht %Vor% Array. Nur neugierig, gibt es einen Trick, dynamisch zu...
13.11.2008, 07:00
7
Antworten

Datenstruktur, die immer n-beste Elemente enthält

Ich brauche eine Datenstruktur, die immer die n größten Elemente enthält, die bisher eingefügt wurden (in keiner bestimmten Reihenfolge). Wenn also n 3 ist, könnten wir die folgende Sitzung haben, in der ich einige Zahlen einfüge und de...
19.02.2009, 06:04
5
Antworten

Wie implementiert man ein Set?

Ich möchte ein Set in C implementieren. Ist es in Ordnung, eine verknüpfte Liste zu verwenden, wenn Sie das SET erstellen, oder sollte ich einen anderen Ansatz verwenden? Wie implementieren Sie normalerweise Ihren eigenen Satz (falls erforder...
29.03.2010, 12:08
7
Antworten

Welche Datenstruktur sollte ich für ein Schlangenspiel verwenden?

Ich habe Hausaufgaben für meine Schule und ich muss in Delphi ein Schlangenspiel machen, wie das von Nokia. Ich frage mich, welche Lösung die beste ist. Ich möchte, dass meine Schlange eine Klasse ist und der Körper eine Reihe von Punkten (Elter...
22.12.2009, 09:58
1
Antwort

Datenstruktur in pl / sql zum Speichern von Schlüsselwertpaaren?

Gibt es trotzdem eine Kartendatenstruktur in pl / sql.     
28.04.2010, 09:40
1
Antwort

Getrennte Datenstruktur vs VirtualStringTree's PVirtualNodes zum Speichern von Daten?

Also habe ich mich damit beschäftigt, meine eigene Datenstruktur zu erstellen. Ich habe es schließlich funktionierte, aber dann entdeckte ich, dass die Speichernutzung im Vergleich zu der alten Methode lächerlich hoch war. Um dies zu testen,...
13.05.2011, 14:00
4
Antworten

Entfernen eines Elements aus einer Prioritätswarteschlange

In Python bietet das heapq -Modul eine Prioritätswarteschlange. Es hat Methoden zum Einfügen und Poppen von Elementen. Wie entfernen Sie ein eingefügtes Element mit der niedrigsten Priorität aus der Warteschlange? (Alternative Reze...
30.03.2011, 10:11