Source: https://www.loukam.net/Systemes_Algorithmique_Repartis_M1_Chapitre1.pdf