Seminar zu den Standardproblemen in der Programmierung paralleler Ablaufeinheiten - Prozesse und Threads.

In der modernen Softwareentwicklung auf Desktop- und Serversystemen sowie in Embedded Software ist die Nutzung der Möglichkeit der Programmierung parallel ablaufender Threads längst weit verbreitet. Für den Entwickler ist die Beherrschung der dafür notwendigen Techniken zur Pflicht geworden, denn es gibt häufig architektonische Vorentscheidungen, die die Anwendung konkurrierender Ablaufstränge notwendig machen und den Entwickler zwingen, sich mit der Technik und den daraus entstehenden Problemen zu beschäftigen.

Der Kurs gibt einen fundierten Einstieg in die Techniken, die für den erfolgreichen Einsatz paraleller Threads beherrscht werden müssen. Dazu werden praktische Übungen auf Betriebssystemen wie UNIX, Linux, Mac OS X oder Windows durchgeführt. Dabei lernen die Teilnehmer die Standardprobleme in der Multithreadingprogrammierung und deren Lösung kennen. Für die Durchführung des Kurses wird auf Anschaulichkeit Wert gelegt. Es werden Probleme diskutiert und typische Fehlersituationen aufgezeigt. Alle Fehlersituationen werden in Beispielen von den Teilnehmern simuliert, Lösungsstrategien praktisch erarbeitet und erprobt.

Neben dem vorgegebenen Stoff gibt der Kurs genügend Raum zur Diskussion eigener Projektbeispiele und Problemsituationen.

Die Kursinhalte in Stichworten:

  • Gründe für die Parallelisierung von Abläufen
  • Historisches zu Prozessen und Threads
    • Hardware
    • Betriebssysteme
  • Prozesse und Threads
  • POSIX, Pthreads
  • Threads unter MS Windows®
  • Parallelität in der Hardware
  • Architekturen der Nebenläufigkeit
  • Threadzustände
  • Echtzeitaspekte
  • Besonderheiten in Echtzeitsystemen
  • Schedulingmechanismen
    • Prioritätsbasiertes Scheduling
    • FIFO- oder Warteschlangen-Scheduling
    • Zeitscheibenverfahren
    • Round Robin Verfahren
    • Runtime Credit Verfahren
  • Datenzugriff aus mehreren Threads
  • Synchronisierung von Datenzugriffen
    • Condvars
    • Events
    • Critical Sections - Spin-Lock Verfahren
    • Mutexe
    • Semaphore
  • Typische Situationen des Datenaustauschs zwischen Threads
  • Typische Fehler
    • Aushungern (Starvation)
    • Deadlocks
    • Race Conditions
    • Prioritätsinversion
  • Lösungsansätze für die typischen Fehler
    • Back-Lock Strategie
    • Monitorkonzept
    • Priority-Boost
    • Endliche Statusmaschine
  • Threadlokaler Speicher
  • Run Once Initialization
  • Diskussion von Nebenläufigkeitsmodellen
    • Pipeline
    • Workgroup Modell
    • Manager/Worker (Client/Server)
    • Fork on Idle
  • Threading und Objektorientierung
  • Diskussion neuer Bibliotheken und Techniken
    • Open MP
    • Boost
    • Der neue C++ Standard C+11
    • Die Windows Architektur im Vergleich zu Unix und Linux
    • Architekturprinzipien von embedded Betriebssystemen
    • Architekturprinzipien von Echtzeitsystemen

Es kann ein beliebiger C oder C++ Compiler eingesetzt werden. Als Plattformen empfehlen sich Windows®-, Mac OS X-, UNIX- oder Linuxsysteme. Wichtig ist dabei, dass die Kursteilnehmer das eingesetzte System kennen. Idealerweise arbeitet man mit mehreren unterschiedlichen Systemen, um Ähnlichkeiten und Unterschiede in modernen Betriebssystemen demonstrieren zu können. Dabei können auch Beispiele in Java zur Eränzung der Technologiepalette herangezogen werden.
Das Seminar kann an spezielle thematische Anforderungen angepasst werden und auf einen bestimmten, für Sie wichtigen Gesichtspunkt, ausgerichtet werden.

Zuletzt geändert am 16.01.2023