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.

    
___
3
Antworten

Alle Knoten in einem Binärbaum mit O (1) Hilfsspeicherplatz löschen?

Der Standardalgorithmus zum Löschen aller Knoten in einem Binärbaum verwendet ein postorder traversal über die Knoten entlang dieser Linien: %Vor% Dieser Algorithmus verwendet O (h) Hilfsspeicherplatz, wobei h die Höhe des Baums ist, au...
24.12.2012, 23:07
5
Antworten

Bestimmen Sie, ob mehr als die Hälfte des Arrays in einem bestimmten Array wiederholt wird

Ich schaute auf die folgenden Frage von Glassdoor : Bestimmen Sie, ob mehr als die Hälfte von N Credits Karten zur selben Person / Eigentümer gehören. Alles, was Sie haben, ist ein Array der Kreditkartennummern und ein API-Anruf wie isSamePe...
07.02.2013, 21:15
6
Antworten

Zuordnung von String zu Integer - Performance verschiedener Ansätze

Nehmen wir an, ich muss eine Zuordnung von String zu einer Ganzzahl vornehmen. Die ganzen Zahlen sind einzigartig und bilden einen kontinuierlichen Bereich beginnend bei 0. Das ist: %Vor% Es gibt mindestens zwei einfache Möglichkeiten, di...
21.10.2010, 09:46
5
Antworten

Verschiedene Arten von verknüpften Listen!

Welche Arten von verknüpften Listen werden üblicherweise verwendet? Ich kenne und habe Folgendes benutzt: Einfach verknüpfte Liste Doppelt verknüpfte Liste Zirkuläre Liste Welche anderen Arten von Listen wurden von Ihnen verwendet...
05.03.2010, 08:54
1
Antwort

Gibt es eine Collection, die wie ein Dictionary ohne die Werte funktioniert?

Ich brauche eine Sammlung, die genau wie ein Dictionary / Hashtable in einem Sinne funktioniert, dass sie zu jedem Zeitpunkt nur eine Instanz eines bestimmten Objekts enthält. Eine generische Klasse wäre vorzuziehen, aber ich nehme, was ich beko...
03.12.2008, 15:43
2
Antworten

Wie können Benutzerdaten nach der Anmeldung zusammengeführt werden?

Es spielt keine Rolle, ob Sie einen Eshop oder eine andere Anwendung erstellen, die Sessions verwendet, um Daten zwischen Anfragen zu speichern. Wenn Sie den Benutzer nicht verärgern wollen, indem Sie ihn zur Registrierung auffordern, müssen Sie...
21.08.2013, 11:39
2
Antworten

Speichern einer Liste innerhalb eines Datenrahmenelements in R

Ich möchte eine Datenstruktur in Form von erstellen %Vor% In Worten, ich bewege einen Ball entlang einer Linie. Der "Start" steht für die linke Position des Balls und das "Ende" steht für die rechte Seite. Die "Elemente" bedeuten, dass ich d...
12.04.2013, 20:26
5
Antworten

Warum Warteschlangen als kreisförmiges Array implementieren?

Wenn ich einen FIFO wie Warteschlangen implementiere, rät mir mein Lehrer immer, es als eine kreisförmige Anordnung und nicht in einer regelmäßigen Anordnung darzustellen. Warum? Liegt es daran, dass wir in letzterem Mülldaten im Array haben...
05.10.2012, 23:04
2
Antworten

Warum wird MapReduce in CouchDB "inkrementell" genannt?

Ich lese das O'Reilly CouchDB Buch. Ich bin verwirrt über den reduce / re-reduce / incremental-MapReduce Teil auf Seite 64. Zu viel ist im O'Reilly Buch mit dem Satz rhetorisch    Wenn Sie daran interessiert sind, die Funktionalität der inkre...
28.06.2012, 00:42
2
Antworten

Warum binarySearch auf einer Liste in Java?

Ich bin mir nicht sicher, warum List als allgemeine Datenstruktur einen binären Suchalgorithmus haben sollte, wenn die Liste sortiert ist. Wird die get -Methode, die den Index akzeptiert, nicht sequenziell durchlaufen, zumindest nicht für Li...
15.01.2012, 22:56