Introduction. Terminology and classification. Mutual exclusion. Concurrent objects. Concurrency and fairness. Models of consistency. Conditions for progress. Spin-Lock. Test-and-Set (TAS). TTAS. Exponential Back off. CLH MSC Queue Lock. Composite key. Clusters and hierarchical keys. Monitors. Semaphores. Barriers. Sense-reversing barrier. Combining tree barrier. Static tree Barrier. Termination detecting barrier. Transactional memory. Transactions and atomicity. Software and hardware transactional memory. Multiprocessor scheduling. The distribution of workload. Definition of distributed systems. Hardware and software concepts. Communications. Remote procedure call. Remote method invocation. Communication by messages. Migration of code. Software agents. Time synchronization. Logical time. Global state and snapshot algorithms. Distributed mutual exclusion. Distributed transactions.