C++20: Überblick zur Concurrency
Sonntag, den 01. Dezember 2019 um 08:21 Uhr

WinzipSeit C++11 stellt sich C++ den Anforderungen der Multicore-Architekturen. Der 2011 veröffentlichte Standard definiert, wie sich ein C++ Programm bei mehreren Threads zu verhalten hat. Dabei setzen sich die C++11 Multithreading-Fähigkeiten aus zwei Komponenten zusammen. Das ist zum einen das definierte Speichermodell, das ist zum anderen die standardisierte Threading-Schnittstelle.

Mit C++17 wird es parallele Versionen fast aller Algorithmen der Standard Template Library geben. So kann einem Algorithmus die sogenannten execution policy mitgegeben werden. Die execution policy bestimmt, ob der Algorithmus sequentiell (std::seq), parallel (std::par) oder parallel und vektorisierend (std::par_unseq) ausgeführt wird. So wird die erste und zweite Variante des sort Algorithmus sequentiell, die dritte parallel und die vierte parallel vektorisierend ausgeführt. C++20 bietet ganz neue Multithreading Konzepte in C++ an. Diese zeichnen sich im wesentlichen dadurch aus, dass sie Multithreading einfacher und damit weniger fehleranfällig machen.

Die atomaren Smart Pointer std::shared_ptr und std::weak_ptr besitzen ein konzeptionelles Problem in Multithreading Programmen. Sie teilen ihren veränderlichen Zustand. Damit sind sie natürlich implizit der Gefahr von kritischen Wettläufen und damit von undefiniertem Programmverhalten ausgesetzt. Zwar sichern std::shared_ptr und std::weak_ptr zu, dass das Inkrementieren und Dekrementieren der Referenzzähler eine atomare Operation ist und dass der Destruktor der Ressource genau nur einmal aufgerufen wird, aber sie sichern nicht zu, dass die Zugriffe auf ihre Ressourcen atomar sind. Damit räumen die neuen atomaren Smart Pointer auf. Mit Tasks in der Form von Promisen und Futuren führte C++11 ein neues Multithreading Konzept in C++ ein. Trotz ihres großen Mehrwertes besitzen sie eine große Unzulänglichkeit. Futures in C++11 können nicht komponiert werden.

 
  • Datenkompression

    Donnerstag, den 02. Januar 2014 um 17:20 Uhr

    Datenkompression findet heutzutage bei jeglicher Übertragung von digitalen Daten statt. Sie hilft Ressourcen bei der Übertragung zu sparen (z. B. Bandbreite oder Speicherplatz) indem die Daten in einer Form übertragen werden, die ̣- abhängig von der Anwendung – möglichst minimal ist. In diesem Artikel stellen wir ein Datenkompressionsprogramm in C++ basierend auf der Huffman-Kodierung vor. Diese findet ihren Einsatz im bekannten ZIP-Dateiformat und beruht auf der so genannten Entropiekodierung.

  • Künstliche neuronale Netze in C#

    Samstag, den 23. Juli 2011 um 20:00 Uhr

    Künstliche neuronale Netze sind Netze aus künstlichen Neuronen. Sie sind ein Zweig der künstlichen Intelligenz und prinzipieller Forschungsgegenstand der Neuroinformatik. In dem folgenden Artikel werden künstliche neuronale Netze beschrieben und die korrespondierenden Algorithmen in C# implementiert. Zum Ende wird eine leistungsfähige Bibliothek entwickelt, mithilfe derer ein Programm (WPF) zur optischen Zeichenerkennung realisiert wird.

  • Speisende Philosophen

    Sonntag, den 20. Februar 2011 um 20:58 Uhr

    Bei dem Philosophenproblem (engl. Dining Philosophers Problem) handelt es sich um ein Fallbeispiel aus dem Bereich der Theoretischen Informatik. Dabei soll das Problem der Nebenläufigkeit illustriert werden und die Gefahr von Deadlocks. Das Problem wurde von Edsger Wybe Dijkstra formuliert und wird seither auch immer als Testproblem für neue Prozeß-Synchronisations-Algorithmen verwendet. In diesem Beispiel wird eine maximal parallele Lösung mit beliebig vielen Philosophen und Sitzplätzen in Java vorgestellt.

  • C/C++ Profiler

    Montag, den 06. September 2010 um 19:56 Uhr

    Profiler sind nützliche Programmierwerkzeuge, die das Laufzeitverhalten von Software analysieren. In der Softwareentwicklung existieren unterschiedliche Problembereiche, die durch ineffiziente Programmierung ausgelöst werden. Ein Profiler hilft dem Entwickler durch Analyse und Vergleich von laufenden Programmen die Problembereiche aufzudecken. Daraus lassen sich Maßnahmen zur strukturellen und algorithmischen Verbesserung des Quellcodes ableiten. Für native C/C++-Programme gibt es eine Reihe kostenfreier Profiler, deren Funktionen in diesem Artikel vorgestellt werden sollen.

  • Client-Server-Modell

    Dienstag, den 24. August 2010 um 11:20 Uhr

    Viele Anwendungen funktionieren in einer Client/Server Umgebung, das bedeutet, dass die Client-Rechner Kontakt aufnehmen zu einem Server, der meist ein Rechner mit sehr großer Eingangs-Ausgangs-Kapazität ist, welcher ihnen die Dienste bereitstellt. Zum Austausch der Daten im Internet hat sich XML mittlerweile als Standard zur Informationsübermittlung durchgesetzt. Zu den wichtigsten Merkmalen zählen die für Menschen lesbare Form und die Plattformunabhängigkeit. In diesem Artikel wird ein Client-Server-Modell in C# entworfen, mit dem serialisierte XML-Dokumente über ein Netzwerk übertragen werden können.


MSDN Virtual Labs

SourceForge

Sun Java

Codeguru | C# Articles
This is a Codeguru directory of articles on the C++ topic of .NET / C#.