Kokia yra skaitytojų ir rašytojų problema?

„Skaitytojų ir rašytojų problema“ yra programavimo dilema, atsirandanti, kai keliems skaitytojams ir rašytojams reikia prieigos prie to paties šaltinio. Jei jiems visiems būtų leista pasiekti iš karto, gali kilti problemų, pvz., perrašymų, neišsamios informacijos ir kitų problemų. Todėl programuotojai gali apriboti prieigą, kad galėtų kontroliuoti, kurios apdorojimo gijos ir kada mato išteklius, atsižvelgdami į sistemos ir vartotojų poreikius. Yra keletas būdų, kaip išspręsti skaitytojų ir rašytojų problemą. Vienas iš labiausiai paplitusių sprendimų yra semaforų naudojimas būsenai pažymėti ir prieigai valdyti.

Žvelgiant iš vienos perspektyvos, bet koks skaitytojų skaičius galėtų saugiai pasiekti šaltinį, nes jie nekeičia turinio. Kai rašytojas įveda lygtį, situacija tampa sudėtingesnė. Jei gija rašoma, o kitos gijos skaito, skaitytojai gali negauti teisingos informacijos. Jie gali gauti tik dalį pakeitimo arba gali matyti pasenusią informaciją ir manyti, kad ji tiksli.

Daugiau nei vienas rašytojas taip pat gali sukelti problemų. Vienu metu keičiant tą patį turinį, jis gali būti perrašytas ir gali atsirasti kitų klaidų. Pagal skaitytojų ir rašytojų problemą programuotojai turi nuspręsti, ar skaitytojai ar rašytojai turi pirmenybę ir kaip tvarkyti prieigą. Skaitytojams ar rašytojams gali būti suteiktas prioritetas, arba sistema gali priskirti prieigą pirmumo tvarka. Šis trečiasis sprendimas gali neleisti ilgai laukti, tačiau gali kilti problemų.

Sprendime, kuriame skaitytojai turi pirmenybę, sistema daro prielaidą, kad bet kuris skaitytojas, prašantis prieigos, turėtų būti įleistas pirmiausia, kai prieiga tampa prieinama. Tai reiškia, kad visiems rašytojams, norintiems pasiekti šaltinį, gali tekti palaukti. Ir atvirkščiai, sistema gali daryti prielaidą, kad rašytojai turi atlikti pakeitimus, kurie gali turėti įtakos skaitytojams, jiems turėtų būti teikiama pirmenybė pagal skaitytojų ir rašytojų problemą. Kai skaitytojas baigia naudoti išteklius, rašytojas gali imtis pakeitimų. Tai taikoma ne tik naudotojo veiksmams, pvz., bandymui išsaugoti dokumentą, bet ir vidiniams kompiuterio procesams, kurie palaiko sistemos veikimą.

Kita parinktis leidžia skaitytojų ir rašytojų problemai suderinti abiejų šalių poreikius, o kiekvienai apdorojimo gijai suteikiama prieiga. Tai neleidžia rašytojams atlikti pakeitimų, kurie nepaiso vienas kito arba klaidina skaitytojus, nepaliekant skaitytojų laukti arba nepriverčiant rašytojų sulaikyti, kol skaitytojai baigia. Tokie prioritetai gali būti integruoti į programinę įrangą arba kompiuterio atminties prieigos valdymą. Vartotojai gali atlikti pakeitimus, jei jiems patogu programuoti ir sistema tai leidžia.