Multithread-/Multicore-Programmierung


Zielgruppe:

Software-Entwickler, Software-Architekten, Projektleiter

Voraussetzungen:

Kenntnis der Programmiersprache C. Da auch viele C++-Beispiele gezeigt werden, sind C++-Kenntnisse hilfreich, aber nicht Voraussetzung. Somit eignet sich dieser Kurs auch für Teilnehmer, die ausschließlich mit C programmieren.

Dauer:

3 Tage (mit praktischen Übungen)

Kursziel:

Dieses Training zeigt, wie die Eigenschaften von Multitask-/Multithread-Systemen eingesetzt werden können bzw. welche Probleme gelöst werden müssen, um die Prozessorleistung, insbesondere bei modernen Multicore-Systemen, bestmöglich nutzen zu können. Es richtet sich an Entwickler, die existierende Applikationen optimieren, oder neue Applikationen entwerfen und implementieren müssen. Die Themen werden allgemeingültig behandelt, so dass das erworbene Wissen prinzipiell auf jede Multithreading- oder Multitasking-Plattform anwendbar ist. Gleichzeitig werden die Lehrinhalte durch eine Fülle von C- und C++-Code-Beispielen konkretisiert. Dabei werden sowohl plattformspezifische Lösungen, basierend auf Windows, Linux und RTEMS, als auch plattformunabhängige Lösungen auf Basis der C++-Multithread-Bibliothek vorgestellt, die seit C++11 zur Verfügung steht.

Inhalt:

MultithreaD-/MULTICORE Grundlagen

  • Konzept Task/Thread (allg. Thread)
  • Thread vs. Prozess
  • Zuordnung von Code und Daten
  • Scheduler und Thread-Zustandsmodell
  • Allgemeine Schedulingmodelle
  • Grunsätzliche Schedulingmechanismen
  • Singlecore-/Multicore-Multithreading

Thread-Programmierung

  • Threads und Funktionen
  • Threads und Objekte
  • Erzeugen und Starten von Threads
  • Der Stack eines Threads
  • Threadpriorität
  • Sonstige Konfigurataionsparameter
  • Parameterübergabe
  • Thread-Beendigung
  • Threadlokaler Speicher (TLS)
  • Thread-Unterbrechung (Signale, Asynchrone Service Routinen)
  • Thread-Terminierung (Thread-Cancellation)

Synchronisation

  • Synchronisation mit Flag
  • Volatile
  • Speichermodell
  • Speicherbarrieren
  • Polling
  • Ereignissynchronisation (Events)
  • Zugriffssynchronisation (Mutexe)
  • Atomare Operationen
  • Typische Probleme und Lösungsansätze
  • Deadlocks und Livelocks
  • Mutex-Implementierungsdetails mit Laufzeitauswirkungen
  • Zugriff auf Ressourcen mit mehreren Einheiten (Semaphore)
  • Ressource-Zugriff mit Ereignisauslösung (Condition Variable)
  • Synchronisation von Threads mit Interrupt-Service-Routinen

Multicore-Programmierung

  • Wann lohnt sich der Einsatz von Multicore?
  • Laufzeitmessungen klassischer Lösungen für ein Synchronisationsproblem
  • Lösung mithilfe von Task Variablen
  • False Sharing
  • Prozessor-/Thread-Affinität
  • Spinlocks
  • Portierung von Singlecore-Applikationen auf Multicore-Systeme
  • Wichtige Kriterien für ein gutes Multithread-Design

praktische Übungen

 

Nicht genau was Sie suchen?

Wir nutzen Cookies auf unserer Website. Einige von ihnen sind essenziell für den Betrieb der Seite, während andere uns helfen, diese Website und die Nutzererfahrung zu verbessern (Tracking Cookies). Sie können selbst entscheiden, ob Sie die Cookies zulassen möchten. Bitte beachten Sie, dass bei einer Ablehnung womöglich nicht mehr alle Funktionalitäten der Seite zur Verfügung stehen.