Avatar ·

En C# : Volatile, Interlocked ou lock — que choisir pour la sécurité des threads d'un simple indicateur ?

Bonjour, collègues ! Je suis un développeur C# débutant et j'essaie de comprendre le multithreading. J'ai une classe simple qui lance un thread en arrière-plan. Le thread doit fonctionner tant que le flag `_isRunning` est true. Un autre thread (par exemple, l'interface utilisateur) peut définir ce flag sur false pour arrêter le travail en arrière-plan. Voici le code simplifié : ```csharp public class Worker { private bool _isRunning = true; public void Start() { Task.Run(() => { while (_isRunning) { // Un travail quelconque Console.WriteLine("Working..."); Thread.Sleep(100); } }); } public void Stop() { _isRunning = false; } } ``` J'ai lu que la simple lecture/écriture d'un bool n'est pas atomique au niveau du processeur, et que le compilateur peut optimiser la boucle en mettant en cache la valeur de `_isRunning` dans un registre. Alors le thread ne verra jamais le changement. En C#, il existe trois outils pour