====== Synchronizacja przetwarzania ====== ===== Zadania ===== ==== Klasyczne problemy synchronizacji ==== === Producent-konsument === [[wppl>Problem_producenta_i_konsumenta|opis w Wikipedii]]\\ Rozwiązania: [[.:java:prod-cons|Java]], [[.:ada:prod-cons-protobj|Ada 95 (obiekt chroniony)]], [[.:ada:prod-cons-randvous|Ada 95 (spotkania) - bufor 1-elem.]], [[.:ada:prod-cons-randvous|Ada 95 (spotkania) - bufor n-elem.]] === Pięciu filozofów === [[wppl>Problem_ucztujących_filozofów|opis w Wikipedii]]\\ Rozwiązania: [[.:java:philosophers|Java]], [[.:ada:philosophers-protobj|Ada 95 (obiekt chroniony)]], [[.:ada:philosophers-randvous|Ada 95 (spotkania)]] === Czytelnicy i pisarze === [[wppl>Problem_czytelników_i_pisarzy|opis w Wikipedii]]\\ Rozwiązania: [[.:java:readers-writers|Java]], [[.:ada:readers-writers-protobj|Ada 95 (obiekt chroniony)]], [[.:ada:readers-writers-randvous|Ada 95 (spotkania)]] === Śpiący fryzjerzy === [[wp>Sleeping_barber_problem|opis w Wikipedii (w j. angielskim)]]\\ Rozwiązania: [[.:java:barbers|Java]], [[.:ada:barbers-protobj|Ada 95 (obiekt chroniony)]], [[.:ada:barbers-randvous|Ada 95 (spotkania)]] ==== Realizacja mechanizmów synchronizacji ==== === Bariery === - 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:barrier|Java]], [[.:ada:barrier-protobj|Ada 95 (obiekt chroniony)]], [[.:ada:barrier-randvous|Ada 95 (spotkania)]] - 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:barrier-weight|Java]], [[.:ada:barrier-weight-protobj|Ada 95 (obiekt chroniony)]], [[.:ada:barrier-weight-randvous|Ada 95 (spotkania)]] === Semafory === - Semafor binarny\\ Rozwiązania: [[.:java:sem-bin|Java]], [[.:ada:sem-bin-protobj|Ada 95 (obiekt chroniony)]], [[.:ada:sem-bin-randvous|Ada 95 (obiekt chroniony)]] - Semafor ogólny (zliczający)\\ Rozwiązania: [[.:java:sem-count|Java]], [[.:ada:sem-count-protobj|Ada 95 (obiekt chroniony)]], [[.:ada:sem-count-randvous|Ada 95 (obiekt chroniony)]] - Semafor uogólniony z preferencją sprawiedliwości\\ Rozwiązania: [[.:java:sem-gen-fair|Java]], [[.:ada:sem-gen-fair-protobj|Ada 95 (obiekt chroniony)]], [[.:ada:sem-gen-fair-randvous|Ada 95 (obiekt chroniony)]] - Semafor uogólniony z preferencją przepustowości\\ Rozwiązania: [[.:java:sem-gen-throughput|Java]], [[.:ada:sem-gen-throughput-protobj|Ada 95 (obiekt chroniony)]], [[.:ada:sem-gen-throughput-randvous|Ada 95 (obiekt chroniony)]] === Zadania z egzaminów === -- 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. .. Rozwiązania: [[.:java:publish-subscribe|Java (podst. środki syn.)]], [[.:ada:publish-subscribe|Ada 95 (obiekt chroniony)]]