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

java - Wie finde ich passende Objekte zwischen zwei Listen?

Bei zwei Listen, von denen jede den gleichen Objekttyp enthält, würde ich gerne Objekte auf der Grundlage einiger Eigenschaftswerte zwischen den beiden übereinstimmenden Listen finden. z.B. Ein Objekt aus List1, L1Obj, stimmt mit einem Objekt...
15.02.2011, 23:39
3
Antworten

Mitarbeiter einplanen - Welche Datenstruktur soll verwendet werden?

Frage Ich versuche eine einfache Mitarbeiter-Planungssoftware für etwa 10-20 Leute in meiner Softwareentwicklungsfirma zu schreiben. Nach einiger Überlegung habe ich mich entschlossen, eine Web-App in Python, Ruby oder PHP + Postgres / MySQL...
27.10.2009, 23:19
3
Antworten

Memory mapped - teilweise diskbasierte Algorithmen

Gibt es gute Ressourcen oder Bücher für auslaufbare Datenstrukturen, also eine Warteschlange? Wenn Sie große Objekte speichern, kann es zwar den gesamten Speicher füllen, aber Sie können zum Beispiel die am häufigsten verwendeten Elemente die...
03.10.2009, 03:07
2
Antworten

Was ist ein Bw-Baum?

Ich habe gerade einen Artikel über "im Speicher OLTP" für die nächste Version von SQL Server gelesen; Es wird erwähnt, dass sowohl BW-Tree als auch Hash-Indizes in CTP2 hinzugefügt werden. Was ist ein BW-Baum? Kann jemand ein wenig darüber er...
17.09.2013, 20:17
5
Antworten

Entwurf eines Algorithmus für große Daten

Ich lese eine dieser Fragen, die für ein Vorstellungsgespräch des Softwareentwicklers gestellt werden. Wenn es 1000 Webseiten und 1000 Benutzer gibt, schreibe ein Programm und eine Datenstruktur, so dass ich in Echtzeit die folgenden Anfragen...
04.07.2012, 06:43
5
Antworten

Wie wählt man ein zufälliges Element aus einem Array, das bestimmten Kriterien in O (1) entspricht?

Ich habe eine Liste von Rezepten, die aus einer Datenbank stammen, die wie folgt aussieht: %Vor% RecipeNode hat unter anderem eine Eigenschaft, die auf ein oder mehrere Tags verweist (z. B. Abendessen , Frühstück , Seite ). Vegetarier...
28.01.2012, 21:10
1
Antwort

Wie sortiere ich den Datentyp in Python?

Ich habe eine Klasse, die etwas mit ein paar Feldern darstellt. Wenn eine Liste von Instanzen dieser Klasse sortiert ist, möchte ich, dass sie in einer bestimmten Reihenfolge sortiert werden (erhalten Sie jeweils einen bestimmten Schlüssel). Ich...
07.01.2011, 21:12
1
Antwort

Datenstruktur zur Darstellung eines Maze

Ich schreibe ein Spiel von Dynamic Labyrinth, in dem sich nach jeder Zeit die Struktur des Labyrinths ändert (Einige Türen werden geschlossen und einige Türen werden sich öffnen. Etwas wie Triwazard in HP4). Kann mir jemand sagen, welche Datenst...
29.12.2010, 04:54
3
Antworten

Python OO-Programmstrukturplanung

Ich bin ein Anfänger in OOP und ich möchte ein Programm mit drei Klassen, A, B und C erstellen. Jede Instanz der Klasse wird durch eine Reihe von Merkmalen definiert, Achar1, Achar2 etc. Das Programm soll Verwendungen erstellen, bestehend a...
15.01.2017, 12:09
5
Antworten

Gruppiert Elemente eines Arrays nach einer Eigenschaft

Ich habe ein Array von Objekten mit der Eigenschaft date . Ich möchte Array-Arrays erstellen, in denen jedes Array Objekte mit demselben Datum enthält. Ich verstehe, dass ich etwas wie .filter brauche, um Objekte zu filtern, und dann...
10.01.2017, 08:43