Na czym polega problem czytelników i pisarzy?
„Problem czytelników i pisarzy” to dylemat programowania, który powstaje, gdy wielu czytelników i pisarzy potrzebuje dostępu do tego samego zasobu. Gdyby wszyscy mieli dostęp od razu, mogą pojawić się problemy takie jak nadpisywanie, niekompletne informacje i inne problemy. Dlatego programiści mogą ograniczyć dostęp do kontroli, 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 oznaczenia statusu i kontroli dostępu.
Z jednej perspektywy dowolna liczba czytelników może bezpiecznie uzyskać dostęp do zasobu, ponieważ nie wprowadza zmian w treści. Gdy pisarz wejdzie do równania, sytuacja staje się bardziej skomplikowana. Jeśli wątek pisze, gdy czytają inne wątki, czytelnicy mogą nie uzyskać poprawnych informacji. Mogą otrzymać tylko część zmiany lub mogą zobaczyć nieaktualne informacje i uznać, że są one prawidłowe.
Problemem może być więcej niż jeden pisarz. Jednoczesne zmiany tej samej treści mogą ją zastąpić i spowodować inne błędy. W ramach problemu czytelnicy-pisarze programiści muszą zdecydować, czy czytelnicy lub pisarze mają pierwszeństwo i jak obsługiwać dostęp. Czytelnikom lub pisarzom można przypisać priorytet lub system może przypisać dostęp według kolejności zgłoszeń. To trzecie rozwiązanie może zapobiec długim oczekiwaniom, ale może wiązać się z własnymi problemami.
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 na początku, kiedy dostęp będzie dostępny. Oznacza to, że każdy pisarz, który chce uzyskać dostęp do zasobu, może poczekać. I odwrotnie, system może założyć, że ponieważ autorzy muszą wprowadzać zmiany, które mogą wpływać na czytelników, powinni mieć pierwszeństwo w ramach problemu czytelnicy-pisarze. Gdy 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ą działanie systemu.
Inna opcja pozwala problemowi czytelników i scenarzystów zrównoważyć potrzeby obu stron, umożliwiając dostęp do każdego wątku przetwarzania w miarę jego nadejścia. Zapobiega to pisarzom dokonywania zmian, które zastępują się nawzajem lub dezorientują czytelników, bez pozostawiania czytelników w oczekiwaniu lub zmuszania pisarzy do wstrzymania się z końcem. Takie priorytety można wbudować w program lub kontrolę dostępu do pamięci w komputerze. Użytkownicy mogą wprowadzać zmiany, jeśli nie mają nic przeciwko programowaniu, a system na to pozwala.