class StopIt
{
private bool stop;
void Loop()
{
while (!stop)
{
// work
}
}
void Stop()
{
stop = true;
}
}
Básicamente, si el método Loop se ejecuta en un subproceso y se llama a Stop desde otro, ¿la operación se detendrá correctamente? Entiendo que bool read/write es atómico. Pero, ¿es esto suficiente? Si el bucle de hilo no se detiene inmediatamente, hay un problema. ¿Debo marcar stop volátil?Es una operación atómica suficiente
Mi regla: si no sabe EXACTAMENTE qué significa volátil, no debería intentar escribir programas sin candado. Ya que haces la pregunta, no sabes lo que significa. Por lo tanto, no intente escribir un programa sin candado. Cuidate. Usa un candado Las cerraduras son solo costosas cuando se disputan; no intente hacerlo sin bloqueo hasta que esté seguro de que (1) tiene un problema de rendimiento (2) el bloqueo es la causa del problema y (3) entiende qué significa volátil hasta el nivel de hardware del procesador. –
¿No debería usar el bloqueo cuando se accede a la detención? Si es así, ¿cómo bloqueo el acceso de lectura en el ciclo while? –
@yummy: es difícil fijar la lectura como se ve ahora, ya que accede al campo directamente en su ciclo while. Si encapsula esa lectura en una propiedad (o un método), puede usar un candado para leer el valor. –