Avatar ·

Em C#: Volatile, Interlocked ou lock — o que escolher para segurança de thread de uma flag simples?

Olá, colegas! Sou um desenvolvedor C# iniciante e estou tentando entender multithreading. Tenho uma classe simples que inicia uma thread em segundo plano. A thread deve continuar executando enquanto a flag `_isRunning` for true. Outra thread (por exemplo, UI) pode definir essa flag como false para interromper o trabalho em segundo plano. Aqui está o código simplificado: ```csharp public class Worker { private bool _isRunning = true; public void Start() { Task.Run(() => { while (_isRunning) { // Algum trabalho Console.WriteLine("Working..."); Thread.Sleep(100); } }); } public void Stop() { _isRunning = false; } } ``` Li que a simples leitura/escrita de bool não é atômica no nível da CPU, e o compilador pode otimizar o loop, armazenando em cache o valor de `_isRunning` em um registrador. Então a thread nunca verá a alteração. Em C#, existem três ferramentas para r