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
  • 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.


  • Microsoft Teams Tips and Tricks

    Microsoft Teams is collaboration software that allows developers to communicate with each other in real-time regardless of location. If your development team is using Microsoft Teams to collaborate, the tips and tricks in this guide can help take your experience to the next level by saving time and boosting productivity. Microsoft Teams Collaboration Software Tips […]

    The post Microsoft Teams Tips and Tricks appeared first on CodeGuru.


  • How to Use Excel for Project Management

    Are you looking for project management software to keep your software development team organized? Surprisingly, you may not have to look any further than Microsoft Excel. In this guide, we will reveal some of the most valuable features of Excel for project management and share tips for getting the most out of the versatile spreadsheet […]

    The post How to Use Excel for Project Management appeared first on CodeGuru.


  • Tips for Creating Effective Presentations in PowerPoint

    Microsoft PowerPoint is one of the most popular tools for creating presentations. However, creating an effective PowerPoint presentation can be daunting, especially if you are new to the software. In this tutorial, we will explore some tips and tricks to help you create engaging and impactful presentations in PowerPoint. PowerPoint Presentation Tips Microsoft PowerPoint has […]

    The post Tips for Creating Effective Presentations in PowerPoint appeared first on CodeGuru.