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.

    
___
7
Antworten

Datenstruktur für die Verzeichnisstruktur verwendet?

Ich mache ein Programm, das der Benutzer Verzeichnisse (nicht in Windows, in meiner App) erstellen und in diesen Ordnern gibt es Unterordner und so weiter; Jeder Ordner muss entweder Ordner oder Dokumente enthalten. Was ist die beste zu verwende...
01.11.2008, 17:28
7
Antworten

Was sind Alternativen zu einem Bit-Array?

Ich habe eine Information Retrieval-Anwendung, die Bit-Arrays in der Größenordnung von 10s Millionen Bits erstellt. Die Anzahl der "gesetzten" Bits in dem Array variiert stark, von allen klaren bis zu allen gesetzten. Derzeit verwende ich ein ge...
30.08.2008, 16:39
3
Antworten

Hat das zusätzliche Komma am Ende eines Diktats, einer Liste oder eines Sets eine besondere Bedeutung?

Ich bemerkte zufällig, dass das Hinzufügen eines zusätzlichen Trennzeichen-Kommas am Ende einer Liste, dict oder set syntaktisch korrekt ist und nichts zur Datenstruktur hinzuzufügen scheint: %Vor% Hat es eine besondere Bedeutung oder Verwen...
15.03.2015, 17:30
3
Antworten

Welche Datenstrukturen und Algorithmen sind in C nicht implementierbar? [geschlossen]

Das mag naiv klingen, aber gibt es irgendwelche Datenstrukturen / Algorithmen, die nicht in C konstruiert werden können, wenn man genug Code hat? Ich verstehe das Argument, Turing sei vollständig. Ich weiß auch, dass es vorteilhaft ist, eine ele...
28.01.2014, 03:21
1
Antwort

Können wir den Bellman-Ford-Algorithmus auf ungerichtete Graphen anwenden?

Ich weiß, dass Bellman-Ford-Algorithmus für gerichtete Graphen funktioniert, aber nur für Info möchte ich wissen, ob es für Ungerichtete Graphen funktioniert? Da mit Ungerichtetem Graphen keine Zyklen erkannt werden können, werden parallele Kant...
09.02.2013, 05:54
6
Antworten

Python: Wird nur mit Existenzprüfung gesetzt?

Ich habe eine Menge von vielen langen Strings, für die ich Existenzeuchen durchführen möchte. Ich brauche nicht die ganze Saite, die jemals gespeichert wurde. Soweit ich das beurteilen kann, hat die set() tatsächlich die Saite gespeichert, di...
26.08.2009, 09:13
4
Antworten

Wie kann ich ein bidirektionales Mapping in JavaScript erstellen oder eine andere Möglichkeit zum Austauschen von Werten?

Ich muss momentan Werte in einer JavaScript-Zeichenkette vorübergehend auslagern, und deshalb muss ich eine Zwei-Wege-Map / Hash-Sache haben. Nehmen wir zum Beispiel an, ich möchte \* in __asterisk__ ändern (dies ist nur ein Beispiel, e...
12.01.2014, 03:07
2
Antworten

Wie verwende ich einen Funktionszeiger in einer C-Struktur?

Ich möchte mehr über die Verwendung von Funktionszeigern in C-Structs lernen, um objektorientierte Programmierung zu emulieren, aber bei meiner Suche habe ich gerade Fragen wie dies , wo die Antwort einfach ist, einen Funktionszeiger zu verwend...
14.07.2012, 05:51
4
Antworten

Was nutzt Java 6 Interface MultivaluedMap?

Was nützt Java-6-Interface MultivaledMap ?     
11.03.2014, 11:16
8
Antworten

Datenstruktur, die nicht in XML ausgedrückt werden konnte?

Was könnte das Beispiel einer Datenstruktur sein, die nicht (vernünftig) in XML ausgedrückt werden konnte? Dies ist eine Interviewfrage und ich kann nichts darüber finden.     
23.06.2012, 06:29