Inhalte:
Die Studierenden erlernen die Grundlagen der deterministischen Programmausführung (deterministische vs. deter-minierte Programmausführung, Maschinen-, Ausführungs- und Programmiermodell) und setzen sich mit den Zielset-zungen der nebenläufigen, parallelen und verteilten Programmierung einschließlich nichtfunktionaler Eigenschaften auseinander. Sie erarbeiten sich die Fähigkeit der nebenläufigen Programmierung mit Prozessen auf Systemen mit gemeinsamem Speicher, sowie der parallelen Programmierung mit Threads auf Systemen mit gemeinsamem Spei-cher. Des Weiteren erlernen die Studierenden Konzepte wie den kritischen Abschnitt und erarbeiten sich Methoden zum Schutz des kritischen Abschnitts in Abhängigkeit vom Maschinenmodell (Schlossvariable [Lock], Semaphore, Monitor). Sie erweitern ihre Fähigkeiten auf den Bereich der parallelen Programmierung mit Nachrichtenaustausch auf Systemen ohne gemeinsamen Speicher. Sie verstehen die Herausforderungen von Verklemmungen und er-arbeiten sich entsprechende Lösungsansätze. Im Bereich der verteilten Programmierung erlernen Studierende, wie sie mit homogenen und heterogenen Systemen ohne gemeinsamen Speicher umgehen. Daneben erarbeiten sie sich die Konzepte der verteilten Programmierung (Fernaufrufe, Peer-to-Peer, Gruppenkommunikation) sowie Grundlagen der Infrastruktur für und des Managements von verteilten Anwendungen. Studierende üben den Ein-satz von Programmierwerkzeugen für die Entwicklung von nebenläufigen, parallelen und verteilten Programmen.