„Problem czytelników i pisarzy” to dylemat programistyczny, który powstaje, gdy wielu czytelników i pisarzy potrzebuje dostępu do tego samego zasobu. Gdyby wszyscy mieli dostęp jednocześnie, mogą pojawić się problemy, takie jak nadpisywanie, niekompletne informacje i inne problemy. Dlatego programiści mogą ograniczyć dostęp, aby kontrolować, które wątki przetwarzania widzą zasób i kiedy, biorąc pod uwagę potrzeby systemu i użytkowników. Istnieje kilka sposobów rozwiązania problemu czytelników i pisarzy. Jednym z najczęstszych rozwiązań jest użycie semaforów do oznaczania statusu i kontroli dostępu.
Z jednej perspektywy dowolna liczba czytelników może bezpiecznie uzyskać dostęp do zasobu, ponieważ nie wprowadzają zmian w treści. Gdy pisarz wejdzie w równanie, sytuacja staje się bardziej skomplikowana. Jeśli wątek pisze, podczas gdy inne wątki czytają, czytelnicy mogą nie uzyskać poprawnych informacji. Mogli otrzymać tylko część zmiany lub zobaczyć nieaktualne informacje i pomyśleć, że są one dokładne.
Więcej niż jeden pisarz może również stwarzać problem. Jednoczesne zmiany tej samej treści mogą ją nadpisać i spowodować inne błędy. W ramach problemu czytelników-piszących programiści muszą zdecydować, czy czytelnicy czy pisarze mają pierwszeństwo i jak obsługiwać dostęp. Czytelnikom lub pisarzom można przydzielić priorytet lub system może przydzielić dostęp na zasadzie „kto pierwszy, ten lepszy”. To trzecie rozwiązanie może zapobiec długim oczekiwaniom, ale może powodować własne problemy.
W rozwiązaniu, w którym czytelnicy mają pierwszeństwo, system zakłada, że każdy czytelnik proszący o dostęp powinien zostać wpuszczony jako pierwszy, gdy dostęp stanie się dostępny. Oznacza to, że wszyscy autorzy, którzy chcą uzyskać dostęp do zasobu, mogą potrzebować czekać. Odwrotnie, system może zakładać, że ponieważ pisarze muszą wprowadzić zmiany, które mogą wpłynąć na czytelników, należy im przyznać pierwszeństwo w kwestii czytelnik-pisarz. Kiedy czytelnik skończy z zasobem, pisarz może wskoczyć, aby dokonać zmiany. Dotyczy to nie tylko działań użytkownika, takich jak próba zapisania dokumentu, ale także wewnętrznych procesów wewnątrz komputera, które utrzymują system w działaniu.
Inna opcja pozwala czytelnikom-pisarzom zrównoważyć potrzeby obu stron, umożliwiając dostęp do każdego wątku przetwarzania, gdy nadejdzie. Uniemożliwia to pisarzom wprowadzanie zmian, które wzajemnie się zastępują lub dezorientują czytelników, bez pozostawiania czytelników czekających lub zmuszania pisarzy do wstrzymania się, gdy czytelnicy kończą. Takie priorytety mogą być wbudowane w program lub kontrolę dostępu do pamięci w komputerze. Użytkownicy mogą wprowadzać zmiany, jeśli są zaznajomieni z programowaniem, a system na to pozwala.