Acquire-Release-Semantik

CppMem - Sukzessive Optimierung 2

Dieser Artikel beendet meine Miniserie über CppMem. Heute breche ich die Sequenzielle Konsistenz und tauche damit tief ein in die Expertendomäne.

Weiterlesen...
Kommentar schreibenGelesen: 5549

Acquire- und Release-Speicherbarrieren

Acquire und release Speicherbarrieren (fences) garantieren ähnliche Synchronisations- und Ordnungsbedingungen wie atomare Operationen mit Acquire-Release-Semantik. Ähnliche, denn die Unterschiede stecken im Detail.

Weiterlesen...
Kommentar schreibenGelesen: 6235

Zäune als Speicherbarrieren

Die zentrale Idee von std::atomic_thread_fence ist es, Synchronisations- und Ordnungsbedingungen zwischen Threads ohne Operationen auf atomaren Variablen zu etablieren.

Weiterlesen...
Kommentar schreibenGelesen: 5781

Acquire-Release-Semantik - Der typische Fehler

Eine release-Operation synchronizes-with einer acquire-Operation auf der gleichen atomaren Variable. Damit lassen sich Threads einfach synchronisieren, wenn ... . Auf dieses wenn will ich tiefer eingehen.

Weiterlesen...
Kommentar schreibenGelesen: 6641

memory_order_consume

std::memory_order_consume ist das legendärste der sechs Speichermodelle. Dieser besondere Ruf ist zwei Tatsachen geschuldet. Zum einen ist die std::memory_order_consume Ordnung sehr verständnisresistent. Zum andern hat es meines Wissens noch kein Compiler umgesetzt.

Weiterlesen...
Kommentar schreibenGelesen: 6013

Transitivität der Acquire-Release-Semantik

Eine release-Operation synchronisiert sich mit einer acquire-Operation auf der gleichen atomaren Variable und erzeugt dazu noch eine Ordnungsbedingung. Damit lassen sich Threads auf performante Weise synchronisieren, wenn sie auf einer gemeinsamen atomaren Variablen agieren. Doch wie lassen sich zwei Threads mit der Acquire-Release-Semantik synchronisieren, wenn sie auf keiner gemeinsamen atomaren Variablen agieren? Eine globale Ordnung der Threads mit Hilfe der Sequenziellen Konsistenz ist oft zu schwergewichtig.

Weiterlesen...
Kommentar schreibenGelesen: 4962

Threadsicheres Initialisieren eines Singletons

Singletons lassen sich in vielen Variationen in C++11 threadsicher initialisieren. Dabei können vereinfachend gesprochen Zusicherung der C++-Laufzeit, Locks oder auch atomare Operationen verwendet werden. Mich interessiert vor allem in diesem Artikel die Antwort auf die Frage: Welche Performanzunterschiede bestehen zwischen den Variationen?

Weiterlesen...
Kommentar schreibenGelesen: 14246

Sukzessive Optimierung - Relaxed-Semantik

Mit der Relaxed-Semantik gelten keine Synchronisations- und Ordnungsbedingungen auf den atomaren Operationen.

Weiterlesen...
Kommentar schreibenGelesen: 4644

Sukzessive Optimierung - Acquire-Release-Semantik

Mit der Acquire-Release-Semantik verlassen wir das Default-Speichermodell in C++. In der Acquire-Release-Semantik findet die Synchronisation nicht zwischen Threads, sondern zwischen atomaren Operationen auf der gleichen atomaren Variable statt.

Weiterlesen...
Kommentar schreibenGelesen: 6303

Abonniere den Newsletter (+ pdf Päckchen)

Beiträge-Archiv

Sourcecode