Avatar ·

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