Basics of multi-threading und synchronization:
- Introduction to concurrent und parallel programming
- Multi-threading with Java und .NET
- Critical sections and synchronisations methods
- Monitor-concepts und their usage in the respective languages
- Special synchronization primitives, e.g., Semaphore, Reader-Writer Locks, latches, barrieres
- Correctness conditions; problems due to data races, race conditions, deadlocks und starvation
Thread Pools for efficient parallelization and asynchronicity:
- Thread Pools: mechanism, concept, work-stealing, Java und .NET
- Task- und Data-Parallelism
- Parallelization of algorithms
- Asynchronous Programming in Java (CompletableFutures)
- C# Async-Await Programming
Selected topics in concurrency:
- GUI und concurrency, asynchronous programming in GUI
- Memory models in Java and .NET: atomicity, visibility, order, memory barriers
- lock-free programming
- Non-blocking data structures
Massive parallelization:
-
- GPU parallelization: concept, kernels, launch configs, memory management, optimizations
- HPC cluster parallelization with MPI
- OpenMP
Advanced programming models for concurrency (optional, depending on the number of lecture weeks in the semester):
- Distributed parallelization with Actors and CSP
- Reactive programming
- Hardware and software transactional memory
Technologies used in the module: Java, .NET C#, C/C++ (for GPU, MPI, OpenMP, etc.).