Principles of concurrent programming. Algorithms for mutual exclusion. Synchronization and communication techniques: semaphores; monitors; rendezvous; conditional critical regions. Multi-process and multi-threaded programming. Concurrent programming facilities in HLL’s.