Sí, cada vez que una estructura de datos como tu lista de tareas puede ser accedida (modificada o vista) por más de un proceso, es esencial que cualquier cambio en esa estructura de datos sea completo y auto-consistente cuando es vista por cualquier proceso. En general, esto se llama "actualización atómica".
Una lista enlazada es una estructura de datos no trivial, y las actualizaciones a ella requieren más de una instrucción de máquina para lograrse. Si la ISR interrumpe el bucle principal cuando está actualizando la lista, la ISR no verá una estructura consistente. Si la ISR luego intenta actualizar la lista por sí misma, se produce el caos.
Una forma sencilla de proteger el acceso a datos compartidos es a través de la exclusión mutua (o "mutex" para abreviar). En el caso de un conflicto entre el bucle principal y la ISR, es fácil lograrlo mediante la bandera de habilitar la interrupción.
- Si la ISR quiere actualizar la estructura, tiene acceso exclusivo, porque por definición, ningún otro proceso puede ejecutarse hasta que salga.
- Si el bucle principal quiere actualizar la estructura, primero debe deshabilitar las interrupciones y luego volver a habilitarlas cuando haya terminado.
Si más de un proceso no interruptor desea acceder a la estructura, puedes agregar una bandera binaria para controlar el acceso a la estructura de datos, y esta bandera solo puede ser establecida por un proceso a la vez. Sin embargo, ten en cuenta que las actualizaciones a esta bandera también deben ser atómicas, lo que significa deshabilitar las interrupciones nuevamente, para que no ocurra un cambio de tarea entre la prueba y el establecimiento de la bandera.