Avatar ·

En C#: Volatile, Interlocked o lock — ¿qué elegir para la seguridad de hilos de un flag simple?

¡Hola, colegas! Soy un desarrollador principiante de C# y estoy tratando de entender el multihilo. Tengo una clase simple que inicia un hilo en segundo plano. El hilo debe ejecutarse mientras el flag `_isRunning` sea true. Otro hilo (por ejemplo, la UI) puede establecer este flag en false para detener el trabajo en segundo plano. Aquí está el código simplificado: ```csharp public class Worker { private bool _isRunning = true; public void Start() { Task.Run(() => { while (_isRunning) { // Algún trabajo Console.WriteLine("Working..."); Thread.Sleep(100); } }); } public void Stop() { _isRunning = false; } } ``` He leído que la simple lectura/escritura de bool no es atómica a nivel de CPU, y el compilador puede optimizar el bucle almacenando en caché el valor de `_isRunning` en un registro. Entonces el hilo nunca verá el cambio. En C# hay tres herramientas para