Synchronization is needed in all systems and environments where several processors (or processes) can be active at the same time. This is the case for operating systems, distributed systems, database systems, distributed computing, and multi-threading and concurrent programming languages. The differ[...]