Problem czytelników i pisarzy

Z Wikipedii, wolnej encyklopedii

Problem czytelników i pisarzy – klasyczny informatyczny problem synchronizacji dostępu do jednego zasobu (pliku, rekordu bazy danych) dwóch rodzajów procesów: dokonujących i niedokonujących w nim zmian.

W problemie czytelników i pisarzy zasób jest dzielony pomiędzy dwie grupy procesów:

  • czytelnicy – wszystkie procesy niedokonujące zmian w zasobie,
  • pisarze – pozostałe procesy.

Jednoczesny dostęp do zasobu może uzyskać dowolna liczba czytelników. Pisarz może otrzymać tylko dostęp wyłączny. Równocześnie z pisarzem dostępu do zasobu nie może otrzymać ani inny pisarz, ani czytelnik, gdyż mogłoby to spowodować błędy.

Warianty rozwiązania problemu[edytuj | edytuj kod]

Problem czytelników i pisarzy posiada kilka rozwiązań.

Wariant faworyzujący czytelników[edytuj | edytuj kod]

Czytelnicy nie mają obowiązku czekania na otrzymanie dostępu do zasobu, jeśli w danym momencie nie otrzymał go pisarz. Ponieważ pisarz może otrzymać tylko dostęp wyłączny, musi czekać na opuszczenie zasobu przez wszystkie inne procesy. Jeśli czytelnicy przybywają odpowiednio szybko, może dojść do zagłodzenia pisarza: w tej sytuacji będzie on w nieskończoność czekał na zwolnienie zasobu przez wciąż napływających nowych czytelników.

Wariant faworyzujący pisarzy[edytuj | edytuj kod]

Czytelnicy nie mogą otrzymać dostępu do zasobu, jeżeli oczekuje na niego pisarz. W tej sytuacji oczekujący pisarz otrzymuje dostęp najwcześniej, jak to jest możliwe, czyli zaraz po opuszczeniu zasobu przez ostatni proces, który przybył przed nim. W tym wariancie może dojść do zagłodzenia oczekujących czytelników.

Inne warianty[edytuj | edytuj kod]

Inne rozwiązania problemu zakładają między innymi równoczesne wyeliminowanie możliwości zagłodzenia obu typów procesów, np. poprzez zastosowanie kolejki FIFO.

Zobacz też[edytuj | edytuj kod]