Kaj je problem bralcev in piscev?

“Problem bralcev in piscev” je programska dilema, ki nastane, ko več bralcev in piscev potrebuje dostop do istega vira. Če bi jim bil dovoljen dostop naenkrat, bi se lahko pojavile težave, kot so prepisi, nepopolne informacije in druge težave. Zato lahko programerji omejijo dostop do nadzora, katere obdelovalne niti vidijo vir in kdaj, glede na potrebe sistema in uporabnikov. Obstaja več načinov za reševanje problema bralcev in piscev. Ena najpogostejših rešitev vključuje uporabo semaforjev za označevanje statusa in nadzor dostopa.

Z ene perspektive lahko poljubno število bralcev varno dostopa do vira, ker ne spreminja vsebine. Ko pisec vstopi v enačbo, postane situacija bolj zapletena. Če nit piše, medtem ko druge niti berejo, bralci morda ne bodo dobili pravilnih informacij. Lahko bi prejeli le del spremembe ali pa bi videli zastarele informacije in menili, da so točni.

Več kot en pisatelj bi lahko povzročil tudi problem. Sočasne spremembe iste vsebine jo lahko prepišejo in povzročijo druge napake. V okviru problema bralcev in piscev se morajo programerji odločiti, ali imajo bralci ali pisci prednost in kako ravnati z dostopom. Bralcem ali piscem bi lahko dodelili prednost ali pa bi sistem lahko dodelil dostop po načelu prvi pride, prvi melje. Ta tretja rešitev lahko prepreči dolga čakanja, vendar bi lahko prišla s svojimi težavami.

V rešitvi, kjer imajo bralci prednost, sistem predvideva, da je treba vsakemu bralcu, ki prosi za dostop, najprej dovoliti vstop, ko je dostop na voljo. To pomeni, da bodo vsi pisci, ki želijo dostopati do vira, morali počakati. Nasprotno pa sistem lahko domneva, da bi morali pisci, ker morajo narediti spremembe, ki bi lahko vplivale na bralce, dati prednost pri problemu bralci-pisci. Ko bralec konča z virom, lahko pisatelj skoči in naredi spremembo. To ne velja samo za dejanja uporabnika, kot je poskus shranjevanja dokumenta, ampak za notranje procese v računalniku, ki zagotavljajo delovanje sistema.

Druga možnost omogoča težavi bralcev in piscev, da uravnotežijo potrebe obeh strani, kar omogoča dostop vsaki procesni niti, ko pride. To piscem preprečuje, da bi izvajali spremembe, ki preglasijo druga drugo ali zmedejo bralce, ne da bi bralci pustili čakati ali prisilili pisce, da zadržijo, medtem ko bralci končajo. Takšne prioritete je mogoče vgraditi v programski program ali nadzor dostopa do pomnilnika v računalniku. Uporabniki bodo morda lahko naredili spremembe, če jim je programiranje všeč in sistem to omogoča.