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
No answers yet.
Inicia sesión para dejar una respuesta