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