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
  • State Management in ASP.NET

    In this ASP.NET programming tutorial, we will discuss the concept of state management and how it applies to the states of users and objects in web applications. What is State Management? State management in any application plays a vital role in preserving the states of users, web pages, objects, or controls. As .NET developers know, […]

    The post State Management in ASP.NET appeared first on CodeGuru.


  • Regular Expressions in C#

    C# is a powerful and highly expressive programming language that allows programmers to create business applications, as well as, personal needs software. C# offers lots of useful features for developers and pattern matching is among them. The .NET language allows programmers to use pattern matching mechanisms that help the control flow of the application by […]

    The post Regular Expressions in C# appeared first on CodeGuru.


  • Project Management Software for .NET Developers

    If you are a .NET developer seeking a project management software solution to help your team increase its efficiency and productivity, then keep reading, as we will go over some of the top PM tools that could fit your development team’s needs. Why Use Project Management Software? With the right project management software, a .NET […]

    The post Project Management Software for .NET Developers appeared first on CodeGuru.


  • An Introduction to Sequence Containers in C++

    In C++, sequence containers are a group of template classes used to store data elements. Because they are template classes, they can be used to store any data elements, including custom classes. The data structure they implement enables sequential access. There are five sequence containers offered by the C++ Standard Template Library. They are: array, […]

    The post An Introduction to Sequence Containers in C++ appeared first on CodeGuru.


  • How to Use Dictionary Objects in C#

    In .NET, a Dictionary class is a collection of a key and value pair of data. C# represents a generic Dictionary <TKey, TValue> class that can be used to create a collection of objects. The key should be identical in a key-value pair and it can have at most one value in the dictionary. TKey represents […]

    The post How to Use Dictionary Objects in C# appeared first on CodeGuru.