Try   HackMD
tags: prir studia

Problem czytelników i pisarzy

Podział ról

Czytelnicy

  • czytają rekordy bazy
  • dowolna ilość czytelników może czytać na raz
  • w trakcie ich czytania do bazy nie może mieć dostępu żaden pisarz

Pisarze

  • tworzą, odczytują, modyfikują i usuwają dane z bazy
  • tylko jeden pisarz w danym momencie może mieć dostęp do bazy (wyłączny dostęp)

Czytelnik -> wyklucza pisarzy
Pisarz -> wyklucza wszystkich

Rozwiązanie z możliwym zagłodzeniem pisarzy

Semaphore dostep = (1, {})

-> CZYTELNIK
Semaphore s = (1, {})
int czytelnikow = 0

loop forever {
    wait(s)
    ++czytelnikow
    if (czytelnikow == 1) wait(dostep)
    signal(s)
    // odczytaj dane z bazy
    wait(s)
    --czytelnikow
    if (czytelnikow == 0) signal(dostep)
    signal(s)
}

-> PISARZ
loop forever {
    wait(dostep)
    // zapisz dane do bazy
    signal(dostep)
}

Zagłodzenie pojawi się, gdy czytelnicy ciągle będą się zgłaszać do bazy, wtedy ich liczba nie spadnie do 0 i pisarze nigdy nie dostaną dostępu do bazy.

Rozwiązanie sprawiedliwe - czytelnicy i pisarze na przemian dostają dostep

...długie