¿Cuál es el problema de los lectores y escritores?
El "problema de lectores y escritores" es un dilema de programación creado cuando varios lectores y escritores necesitan acceder al mismo recurso. Si se les permitiera el acceso a todos a la vez, podrían surgir problemas como sobrescripciones, información incompleta y otros problemas. Por lo tanto, los programadores pueden restringir el acceso para controlar qué subprocesos de procesamiento ven el recurso y cuándo, considerando las necesidades del sistema y los usuarios. Hay varias formas de abordar el problema de lectores-escritores. Una de las soluciones más comunes implica el uso de semáforos para marcar el estado y controlar el acceso.
Desde una perspectiva, cualquier número de lectores podría acceder de forma segura a un recurso porque no están haciendo cambios en el contenido. Una vez que un escritor entra en la ecuación, la situación se vuelve más complicada. Si un hilo está escribiendo mientras otros hilos están leyendo, los lectores pueden no obtener la información correcta. Podrían recibir solo una parte del cambio, o podrían ver la información desactualizada y pensar que es precisa.
Más de un escritor también podría crear un problema. Los cambios simultáneos en el mismo contenido pueden sobrescribirlo y crear otros errores. Bajo el problema de lectores-escritores, los programadores deben decidir si los lectores o escritores tienen prioridad y cómo manejar el acceso. Se podría asignar prioridad a los lectores o escritores, o el sistema podría asignar acceso por orden de llegada. Esta tercera solución puede evitar largas esperas, pero podría tener problemas propios.
En una solución donde los lectores tienen prioridad, el sistema asume que cualquier lector que solicite acceso debe tener acceso primero, cuando el acceso esté disponible. Esto significa que cualquier escritor que quiera acceder al recurso podría necesitar esperar. Por el contrario, el sistema podría asumir que debido a que los escritores necesitan hacer cambios que puedan afectar a los lectores, se les debe dar prioridad bajo el problema de lectores-escritores. Cuando un lector termina con un recurso, un escritor puede intervenir para hacer un cambio. Esto se aplica no solo a las acciones del usuario, como intentar guardar un documento, sino a los procesos internos dentro de la computadora que mantienen el sistema en funcionamiento.
Otra opción permite que el problema de los lectores-escritores equilibre las necesidades de ambas partes, permitiendo que cada hilo de procesamiento acceda a medida que llega. Esto evita que los escritores realicen cambios que se anulen entre sí o confundan a los lectores, sin dejar a los lectores en espera ni forzar a los escritores a esperar mientras los lectores terminan. Dichas prioridades pueden integrarse en un programa de software o control de acceso a la memoria en una computadora. Los usuarios pueden realizar cambios si se sienten cómodos con la programación y el sistema lo permite.