“Lukijoiden ja kirjoittajien ongelma” on ohjelmointiongelma, joka syntyy, kun useat lukijat ja kirjoittajat tarvitsevat pääsyn samaan resurssiin. Jos niille kaikille annettiin pääsy kerralla, saattaa ilmetä ongelmia, kuten korvauksia, puutteellisia tietoja ja muita ongelmia. Siksi ohjelmoijat voivat rajoittaa pääsyä hallitsemaan, mitkä prosessointiketjut näkevät resurssin ja milloin, ottaen huomioon järjestelmän ja käyttäjien tarpeet. Lukijoiden ja kirjoittajien ongelmaan voidaan puuttua useilla tavoilla. Yksi yleisimmistä ratkaisuista on käyttää semaforia tilan merkitsemiseen ja pääsyn valvontaan.
Yhdestä näkökulmasta mikä tahansa lukija voisi turvallisesti käyttää resurssia, koska he eivät tee muutoksia sisältöön. Kun kirjoittaja tulee yhtälöön, tilanne muuttuu monimutkaisemmaksi. Jos säie kirjoittaa, kun muut säikeet lukevat, lukijat eivät ehkä saa oikeaa tietoa. He voivat saada vain osan muutoksesta tai nähdä vanhentuneet tiedot ja pitää sitä paikkansa pitävänä.
Useat kirjoittajat voivat myös luoda ongelman. Saman sisällön samanaikaiset muutokset voivat korvata sen ja aiheuttaa muita virheitä. Lukijoiden ja kirjoittajien ongelman alla ohjelmoijien on päätettävä, onko lukijoilla tai kirjoittajilla etusija ja miten käsitellä pääsyä. Lukijoille tai kirjoittajille voitaisiin antaa etusija tai järjestelmä voisi määrittää pääsyn saapumisjärjestyksessä. Tämä kolmas ratkaisu voi estää pitkiä odotuksia, mutta voi aiheuttaa omia ongelmia.
Ratkaisussa, jossa lukijat ovat etusijalla, järjestelmä olettaa, että kaikki lukijat, jotka pyytävät pääsyä, pitäisi päästä ensin sisään, kun pääsy tulee saataville. Tämä tarkoittaa, että kaikki kirjoittajat, jotka haluavat käyttää resurssia, saattavat joutua odottamaan. Päinvastoin, järjestelmä voisi olettaa, että koska kirjoittajien on tehtävä muutoksia, jotka voivat vaikuttaa lukijoihin, heidät olisi asetettava etusijalle lukijoiden ja kirjoittajien ongelman alla. Kun lukija on saanut resurssin, kirjoittaja voi hypätä sisään tehdäkseen muutoksen. Tämä ei koske vain käyttäjän toimia, kuten asiakirjan tallentamista, vaan myös tietokoneen sisäisiä prosesseja, jotka pitävät järjestelmän käynnissä.
Toinen vaihtoehto mahdollistaa lukijoiden ja kirjoittajien ongelman tasapainottamaan molempien osapuolten tarpeet, jolloin jokainen käsittelyketju pääsee käsiksi saapuessaan. Tämä estää kirjoittajia tekemästä muutoksia, jotka ohittavat toisensa tai hämmentävät lukijoita jättämättä lukijoita odottamaan tai pakottamaan kirjoittajia odottamaan lukijoiden lopetuksen aikana. Tällaiset prioriteetit voidaan sisällyttää ohjelmistoon tai tietokoneen muistinhallintaan. Käyttäjät voivat tehdä muutoksia, jos he tuntevat ohjelmoinnin ja järjestelmä sallii sen.