Spis treści

Synchronizacja przetwarzania

Zadania

Klasyczne problemy synchronizacji

Producent-konsument

opis w Wikipedii
Rozwiązania: Java, Ada 95 (obiekt chroniony), Ada 95 (spotkania) - bufor 1-elem., Ada 95 (spotkania) - bufor n-elem.

Pięciu filozofów

opis w Wikipedii
Rozwiązania: Java, Ada 95 (obiekt chroniony), Ada 95 (spotkania)

Czytelnicy i pisarze

opis w Wikipedii
Rozwiązania: Java, Ada 95 (obiekt chroniony), Ada 95 (spotkania)

Śpiący fryzjerzy

opis w Wikipedii (w j. angielskim)
Rozwiązania: Java, Ada 95 (obiekt chroniony), Ada 95 (spotkania)

Realizacja mechanizmów synchronizacji

Bariery

  1. Bariera
    Działanie bariery polega na blokowaniu procesów wywołujących funkcję synchronizującą aż do momentu, gdy ich liczba osiągnie ustaloną wartość.
    Rozwiązania: Java, Ada 95 (obiekt chroniony), Ada 95 (spotkania)
  2. Bariera z wagami
    Procesy wywołują funkcję synchronizującą z parametrem, stanowiącym wagę. Przełamanie bariery nastąpi po przekroczeniu przez sumę wag ustalonej wartości.
    Rozwiązania: Java, Ada 95 (obiekt chroniony), Ada 95 (spotkania)

Semafory

  1. Semafor binarny
    Rozwiązania: Java, Ada 95 (obiekt chroniony), Ada 95 (obiekt chroniony)
  2. Semafor ogólny (zliczający)
    Rozwiązania: Java, Ada 95 (obiekt chroniony), Ada 95 (obiekt chroniony)
  3. Semafor uogólniony z preferencją sprawiedliwości
    Rozwiązania: Java, Ada 95 (obiekt chroniony), Ada 95 (obiekt chroniony)
  4. Semafor uogólniony z preferencją przepustowości
    Rozwiązania: Java, Ada 95 (obiekt chroniony), Ada 95 (obiekt chroniony)

Zadania z egzaminów

  1. Proszę przedstawić realizację mechanizmu komunikacji typu publikacja-subskrypcja (ang. publish-subscribe) z blokowaniem publicysty i możliwością pracy subskrybentów w trybie off line. Działanie mechanizmu opiera się na następujących zasadach:

    • subskrybent musi się zarejestrować zanim będzie mógł odbierać komunikaty, rejestracja jest nieblokująca i zwraca identyfikator (kolejną wartość całkowitą począwszy od 0), który musi być użyty przy odbiorze wiadomości,
    • publicysta jest blokowany podczas przekazywana wiadomości do momentu, aż wszyscy zarejestrowani w danym momencie subskrybenci odbiorą tę wiadomość,
    • subskrybent jest blokowany podczas obierania wiadomości do momentu, aż zostanie ona opublikowana,
    • wiadomość nie może trafić do subskrybenta, który rejestruje się po rozpoczęciu przekazywania wiadomości przez publicystę.

    Mechanizm powinien udostępniać następujące operacje:

    • int register() — rejestrowanie subskrybentów,
    • Message read(int id) — odczyt wiadomości przez subskrybenta,
    • write(Message m) — publikowanie wiadomości.