In C#: Volatile, Interlocked oder lock – was wählt man für die Threadsicherheit eines einfachen Flags?
Hallo Kollegen! Ich bin ein Anfänger in C# und versuche, mich mit Multithreading vertraut zu machen. Ich habe eine einfache Klasse, die einen Hintergrundthread startet. Der Thread soll laufen, solange das Flag `_isRunning` true ist. Ein anderer Thread (z. B. UI) kann dieses Flag auf false setzen, um die Hintergrundarbeit zu stoppen.
Hier ist der vereinfachte Code:
```csharp
public class Worker
{
private bool _isRunning = true;
public void Start()
{
Task.Run(() =>
{
while (_isRunning)
{
// Irgendeine Arbeit
Console.WriteLine("Working...");
Thread.Sleep(100);
}
});
}
public void Stop()
{
_isRunning = false;
}
}
```
Ich habe gelesen, dass einfaches Lesen/Schreiben von bool auf Prozessorebene nicht atomar ist und der Compiler die Schleife optimieren kann, indem er den Wert von `_isRunning` in einem Register zwischenspeichert. Dann würde der Thread die Änderung nie sehen.
In C# gibt es drei Werkzeuge für d