Vad är problemet med läsare och skribenter?

”Readers-writers-problemet” är ett programmeringsdilemma som skapas när flera läsare och skribenter behöver tillgång till samma resurs. Om de alla fick åtkomst på en gång kan problem som överskrivningar, ofullständig information och andra problem uppstå. Därför kan programmerare begränsa åtkomsten för att kontrollera vilka bearbetningstrådar som ser resursen och när, med tanke på systemets och användarnas behov. Det finns flera sätt att lösa problemet med läsare-författare. En av de vanligaste lösningarna involverar användningen av semaforer för att flagga status och kontrollera åtkomst.

Ur ett perspektiv kan valfritt antal läsare säkert komma åt en resurs eftersom de inte gör ändringar i innehållet. När en författare väl kommer in i ekvationen blir situationen mer komplicerad. Om en tråd skriver medan andra trådar läser kan det hända att läsarna inte får korrekt information. De kan bara ta emot en del av förändringen eller kanske se den föråldrade informationen och tro att den är korrekt.

Mer än en författare kan också skapa ett problem. Samtidiga ändringar av samma innehåll kan skriva över det och skapa andra fel. Under problemet med läsare-författare måste programmerare bestämma om läsare eller skribenter har prioritet och hur de ska hantera åtkomst. Läsare eller skribenter kan tilldelas prioritet, eller så kan systemet tilldela åtkomst efter först till kvarn-principen. Denna tredje lösning kan förhindra långa väntetider, men kan komma med egna problem.

I en lösning där läsarna har prioritet utgår systemet från att alla läsare som ber om åtkomst ska tillåtas först när åtkomst blir tillgänglig. Detta innebär att alla skribenter som vill komma åt resursen kan behöva vänta. Omvänt kan systemet anta att eftersom skribenter behöver göra ändringar som kan påverka läsarna, bör de prioriteras under problemet med läsare-författare. När en läsare är klar med en resurs kan en författare hoppa in för att göra en förändring. Detta gäller inte bara för användaråtgärder som att försöka spara ett dokument, utan för interna processer inuti datorn som håller systemet igång.

Ett annat alternativ gör det möjligt för läsarna-skribenternas problem att balansera behoven hos båda parter, vilket ger varje bearbetningstråd åtkomst när den anländer. Detta förhindrar skribenter från att göra ändringar som åsidosätter varandra eller förvirrar läsarna, utan att låta läsarna vänta, eller tvinga skribenter att vänta medan läsarna avslutar. Sådana prioriteringar kan byggas in i ett program eller minnesåtkomstkontroll i en dator. Användare kanske kan göra ändringar om de är bekväma med programmering och systemet tillåter det.