Tasks

C++ Core Guidelines: Mehr Regeln zur Concurrency und zur Parallelität

Das Schreiben von Multithreading-Programmen ist sehr anspruchsvoll. Das gilt vor allem, wenn sie korrekt sein sollen. Die Regeln der C++ Core Guidelines geben die notwendige Hilfe an die Hand, um korrekte Programme zu schreiben. Die Regeln in diesem Artikel werden sich mit Themen wie Data Races, dem Teilen von Daten, Tasks und dem berühmt-berüchtigten Schlüsselwort volatile beschäftigen.

Hier geht es direkt zum Artikel auf Heise Developer:

Kommentar schreibenGelesen: 4771

std::future Erweiterungen

Tasks in der Form von Promisen und Futuren in C++11 genießen einen ambivalenten Ruf. Zum einen sind sie deutlich leichter zu verwenden als Threads oder Bedingungsvariablen, zum anderen besitzen sie eine große Unzulänglichkeit. Sie können nicht komponiert werden. Mit dieser Unzulänglichkeit räumt C++20 auf.

Weiterlesen...
Tags: Tasks, C++20
Kommentar schreibenGelesen: 9920

Monaden in C++

Monaden in C++? Was für ein seltsamer Titel für einen Artikel. Doch so seltsam ist er gar nicht. Mit std::optional wird C++17 um eine Monade erweiterte. Die Ranges-Bibliothek von Eric Niebler und die erweiterten Futures, auf die wir in C++20 hoffen dürfen, sind Monaden.

Weiterlesen...
Kommentar schreibenGelesen: 12184

Mein Fazit: Addition in drei verschiedenen Varianten

Nachdem ich in den letzten drei Artikel die Summe eines Vektors in drei verschiedenen Strategien berechnet habe, möchte ich mit diesem Artikel mein Fazit ziehen.

Weiterlesen...
Tags: Tasks
Kommentar schreibenGelesen: 8536

Multithreaded: Addition mit minimaler Synchronisation

Zwei Strategien bin ich bisher bei meiner Addition aller Elemente eines std::vector gefolgt. Zum einen habe ich die ganze Summation in einem Thread ausgeführt (Single-Threaded: Summe der Elemente eines Vektors), zum anderen alle Threads auf einer gemeinsamen Summations-Variable (Multithreaded: Addition mit einer geteilten Variable) agieren lassen. Gerade die zweite Strategie war sehr naiv. In diesem Artikel werde ich meine Erkenntnisse aus beiden Artikeln anwenden. Mein Ziel wird es daher sein, die Threads möglichst unabhängig ihre Arbeit ausführen zu lassen und die Synchronisation der Threads auf der Summations-Variable zu minimieren.

Weiterlesen...
Kommentar schreibenGelesen: 5638

Besondere Futures mit std::async

Der erzeugende Thread muss sich um die Lebenszeit seines erzeugten Threads (th) kümmern. Der Erzeuger wartet entweder, bis sein Kind seine Arbeit vollzogen hat (th.join()) oder er trennt sich von ihm (th.detach()). Das ist alles ein alter Hut. Dies gilt aber nicht für std:.async. Der große Charme von std::async besteht auch darin, dass sich der Erzeuger nicht um die Lebenszeit seines Kindes kümmern muss. 

Weiterlesen...
Tags: Tasks
Kommentar schreibenGelesen: 11961

Bedingungsvariablen versus Tasks zur Synchronisation von Threads

 

Werden Promise und Future für die Synchronization von Threads verwendet, haben sie sehr viel gemein mit Bedingungsvariablen. Meist sind Tasks die bessere Wahl.

Weiterlesen...
Kommentar schreibenGelesen: 7205

Das C++-Speichermodell

Seit dem C++11-Standard besitzt C++ ein Speichermodell. Dieses Speichermodell ist die elementare Grundlage dafür, das C++ Programme in Multithreading Umgebungen ein definiertes Verhalten haben.

Weiterlesen...
Kommentar schreibenGelesen: 10468

Promise und Future

std::promise und std::future geben die volle Kontrolle über die Task.

Weiterlesen...
Kommentar schreibenGelesen: 11321

Abonniere den Newsletter (+ pdf Päckchen)

Beiträge-Archiv

Sourcecode