This repository contains solutions to a series of assignments for a course on Concurrent and Distributed Programming.
The course focuses on the foundations, principles, and practical techniques of concurrent, parallel, and distributed systems. The assignments provide hands-on experience with synchronization mechanisms, multithreading, shared-memory parallelism, and message-passing systems.
- Concurrent programming concepts, models, and paradigms
- Processes and threads
- Mutual exclusion and condition synchronization
- Critical sections, locks, barriers, and condition variables
- Semaphores and monitors
- Concurrent objects (locking, lock-free, wait-free)
- Shared-memory parallelism (OpenMP)
- Distributed programming and message passing (MPI)
| Homework | Topic |
|---|---|
| Homework 1 | Critical Sections, Locks, Barriers, and Condition Variables |
| Homework 2 | Programming with OpenMP |
| Homework 3 | Use of Semaphores |
| Homework 4 | Programming with Concurrent Objects (Monitors) |
| Homework 5 | Distributed Computing with Message Passing |
Each assignment is located in its own directory and includes source code and a brief explanation of the solution approach.
- Languages: C, Java
- Libraries: pthreads, OpenMP, Java Concurrency, MPI
- Concepts: Mutexes, Condition Variables, Barriers, Semaphores, Monitors
Through these assignments, the goal is to:
- Understand fundamental concurrency problems and solution strategies
- Implement correct and efficient synchronization mechanisms
- Develop parallel programs for shared-memory systems
- Build distributed applications using message passing
- Evaluate performance and scalability of concurrent applications
These assignments are part of an university course and are intended for educational purposes.