Aller au contenu principal

🌀 Conditions de course (asyncio)

🎯 Objectif pédagogique

  • Montrer que même sans threads, des corruptions logiques peuvent apparaître.

📜 Énoncé

Écrire un programme qui exécute plusieurs coroutines qui incrémente une variable partagée. Concevoir le code de façon à produire une erreur dans la valeur finale.

Voici un point de départ, mais ce code ne produit pas d'erreur.

import asyncio

compteur = 0

async def incrementer():
global compteur
valeur = compteur
valeur += 1
compteur = valeur

async def main():
global compteur
await asyncio.gather(
incrementer(),
incrementer()
)
print(compteur)

if __name__ == "__main__":
asyncio.run(main())