variable significa que c# thread-safety volatile

c# - significa - ¿Es esto(bool volátil) siempre hilo seguro?



variable volatile arduino (2)

Me pregunto si esto es completamente seguro para subprocesos y si la palabra clave volátil debería estar en su lugar o no.

using System.Threading; class Program { private static volatile bool _restart = true; private static void Main() { while (_restart) { // Do stuff here every time for as long as _restart is true Thread.Sleep(1); } } private static void SomeOtherThread() { Thread.Sleep(1000); _restart = false; } }

Creo que lo es, pero quiero volver a verificar, ya que no estoy 100% seguro de que solo quiero estar seguro.

Creo que la palabra clave volátil es necesaria porque entonces nunca sería posible tener el valor almacenado en caché en registros o optimizaciones similares.


Debe reemplazar toda la construcción con un ManualResetEvent , que es seguro y rápido para subprocesos.

private static readonly ManualResetEvent ev = new ManualResetEvent(); private static void Main() { ev.WaitOne() } private static void SomeOtherThread() { Thread.Sleep(1000); ev.Set(); }


La respuesta de SLaks es correcta, por supuesto, pero para responder a su pregunta: sí en ambos sentidos: es seguro, debe ser declarado volátil