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# vs Java

    C# and Java are two very popular programming languages, each regularly topping the charts of the top 5 most widely use programming languages in the world. Both programming languages share a similar syntax and structure, and are often considered to be part of the same family of programming languages – notably, the “C-family”, which includes […]

    The post C# vs Java appeared first on CodeGuru.


  • Microsoft Office 365 Review

    Is Microsoft 365 the right office suite software to fulfill your needs? We will help you answer that question by reviewing Microsoft Office 365 in terms of its features, pricing, and pros and cons. Read: The Top Task Management Software for Developers What are Microsoft Office 365’s Features Before we jump into what this suite […]

    The post Microsof t Office 365 Review appeared first on CodeGuru.


  • C# versus C

    Without a doubt, C and C# are two of the most powerful and popular programming languages used for software development in the world. Both languages share certain similarities, as their names suggest; however, they are also very different in terms of structure, syntax, performance, and, perhaps most notably, memory management. In addition, C and C# […]

    The post C# versus C appeared first on CodeGuru.


  • Different Types of JIT Compilers in .NET

    The majority of today’s programming languages are written in human-readable form known as source code. Computers, however, cannot understand source code, and, as such, to execute or run source code, compilers are used to convert code into machine language (also known as native code) for the computer to understand the set of instructions (what code […]

    The post Different Types of JIT Compilers in .NET appeared first on CodeGuru.


  • Middleware in ASP.NET Core

    Middleware is a piece of computer software that allows software ( such as an internet application) to communicate with databases, servers, and remote machines. Middleware handles the HTTP requests and HTTP responses between a client and a server, which helps developers build better and more efficient software architecture. Read: Best Online Courses to Learn C# […]

    The post Middleware in ASP.NET Core appeared first on CodeGuru.