Chapters: History, sequential programming, concurrent programming, error handling, advanced topics
They say it takes four days to complete the course. If you know a little Prolog and a little LISP it takes you rather a few hours.
The Little Book of Semaphores is a free (in both senses of the word) textbook that introduces the principles of synchronization for concurrent programming.
In most computer science curricula, synchronization is a module in an Operating Systems class. OS textbooks present a standard set of problems with a standard set of solutions, but most students don't get a good understanding of the material or the ability to solve similar problems.
The approach of this book is to identify patterns that are useful for a variety of synchronization problems and then show how they can be assembled into solutions. After each problem, the book offers a hint before showing a solution, giving students a better chance of discovering solutions on their own.
The book covers the classical problems, including "Readers-writers", "Producer-consumer", and "Dining Philosophers". In addition, it collects a number of not-so-classical problems, some written by the author and some by other teachers and textbook writers. Readers are invited to create and submit new problems.
The process of writing large parallel programs is complicated by the need to specify both the parallel behaviour of the program and the algorithm that is to be used to compute its result.
D. Aumayr, S. Marr, E. Gonzalez Boix, and H. Mössenböck. Proceedings of the 16th ACM SIGPLAN International Conference on Managed Programming Languages and Runtimes, page 157--171. ACM, (October 2019)
X. Chang, W. Dou, Y. Gao, J. Wang, J. Wei, and T. Huang. Proceedings of the 41st International Conference on Software Engineering, page 631--642. IEEE Press, (May 2019)
H. Sun, D. Bonetta, F. Schiavio, and W. Binder. Proceedings of the 2019 IEEE/ACM International Symposium on Code Generation and Optimization, page 61--72. IEEE Press, (2019)
T. Tu, X. Liu, L. Song, and Y. Zhang. Proceedings of the Twenty-Fourth International Conference on Architectural Support for Programming Languages and Operating Systems - ASPLOS \textquotesingle19, ACM, (2019)
J. Swalens, J. De Koster, and W. De Meuter. Proceedings of the 8th ACM SIGPLAN International Workshop on Programming Based on Actors, Agents, and Decentralized Control - AGERE 2018, page 33--43. ACM, (November 2018)
J. Roemer, K. Genc, and M. Bond. Proceedings of the 39th ACM SIGPLAN Conference on Programming Language Design and Implementation, page 374--389. ACM, (2018)
J. Protze, M. Schulz, D. Ahn, and M. Müller. Proceedings of the 27th International Symposium on High-Performance Parallel and Distributed Computing, page 144--155. ACM, (2018)