El funcionamiento en la variable prevent -count no es atómico. La región del código entre un inc y un dec de una cuenta anticipada de un subproceso está garantizada para que el planificador no la cambie. El cambio de contexto del subproceso actual en esta región de código solo puede ocurrir en otras excepciones o interrupciones incorporadas. Después de que se complete la primera operación inc, los demás controladores verán que la variable no es cero, por lo tanto, no causará un cambio de contexto. Antes de que el inc finalice, el hilo se puede cambiar, pero está bien ya que el código no ha llegado a la zona protegida.
Algunos detalles: La definición de una variable atómica debe ser algo así como "Atomic variables are the ones on whom the read modify write operation is done as one instruction with out any interruption". La operación "Leer-Modificar-Escribir" en una cuenta previa-preventiva puede ser interrumpida por otro manejador de excepciones o manejador de interrupciones, pero solo de manera estrictamente incrustada, eso es por el diseño del kernel. Dado que esas operaciones integradas están en pares, por lo tanto, el valor de una cuenta previa no se corrompe con el tiempo. Aunque se puede interrumpir una operación R-M-W y se puede desconectar el hilo actual (solo si no se ha completado ninguno de los inc inc incrustados), pero está bien ya que el código no ha llegado a la región protegida. Una vez que se vuelve a conectar el hilo, continuará con la operación R-M-W y desde ese punto el hilo actual no se apagará hasta que todas las decimales aparejadas finalicen.
Muchas gracias. pueden ustedes responder mis siguientes preguntas también por favor. – mousey
muchas gracias. – mousey
@caf, y mousey: si inc/dec también es llamado por manejadores de fallas o controladores de interrupción, ¿sería seguro? ¿O hay reglas que dicen que no se puede hacer? Ideas? – minghua