Što je problem čitatelja i pisaca?

“Problem čitatelja i autora” je programska dilema nastala kada više čitatelja i pisaca treba pristup istom resursu. Kad bi im se svima omogućio pristup odjednom, mogli bi se pojaviti problemi poput prepisivanja, nepotpunih informacija i drugih problema. Stoga programeri mogu ograničiti pristup kako bi kontrolirali koje niti obrade vide resurs i kada, s obzirom na potrebe sustava i korisnika. Postoji nekoliko načina rješavanja problema čitatelja i pisaca. Jedno od najčešćih rješenja uključuje korištenje semafora za označavanje statusa i kontrolu pristupa.

Iz jedne perspektive, bilo koji broj čitatelja mogao bi sigurno pristupiti resursu jer ne mijenjaju sadržaj. Kada pisac uđe u jednadžbu, situacija postaje složenija. Ako nit piše dok druge niti čitaju, čitatelji možda neće dobiti točne informacije. Mogli bi primiti samo dio promjene ili bi mogli vidjeti zastarjele informacije i pomisliti da su točne.

Više od jednog pisca također bi moglo stvoriti problem. Istodobne promjene istog sadržaja mogu ga prebrisati i stvoriti druge pogreške. Pod problemom čitatelji-pisci, programeri moraju odlučiti imaju li čitatelji ili pisci prioritet i kako će upravljati pristupom. Čitateljima ili piscima bi se mogao dodijeliti prioritet, ili bi sustav mogao dodijeliti pristup po principu prvi dođe, prvi posluži. Ovo treće rješenje moglo bi spriječiti duga čekanja, ali bi moglo dovesti do problema.

U rješenju u kojem čitatelji imaju prioritet, sustav pretpostavlja da se svakom čitatelju koji traži pristup treba dopustiti prvi, kada pristup postane dostupan. To znači da bi svi pisci koji žele pristupiti resursu trebali pričekati. Suprotno tome, sustav bi mogao pretpostaviti da, budući da pisci moraju napraviti promjene koje bi mogle utjecati na čitatelje, treba im dati prioritet u okviru problema čitatelji-pisci. Kada čitatelj završi s resursom, pisac bi mogao uskočiti kako bi napravio promjenu. To se ne odnosi samo na radnje korisnika kao što je pokušaj spremanja dokumenta, već i na interne procese unutar računala koji održavaju rad sustava.

Druga opcija omogućuje problemu čitatelja i pisca da uravnoteži potrebe obiju strana, dopuštajući pristup nitima obrade kako stigne. To sprječava pisce da unose promjene koje se nadjačavaju ili zbunjuju čitatelje, bez ostavljanja čitatelja da čekaju ili prisiljavanja pisaca da čekaju dok čitatelji završe. Takvi prioriteti mogu se ugraditi u softverski program ili kontrolu pristupa memoriji u računalu. Korisnici će možda moći unositi promjene ako su zadovoljni programiranjem i ako sustav to dopušta.