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