Semafory - Kamil Dworak
Transkrypt
Semafory - Kamil Dworak
Programowanie Wspóªbie»ne Semafory Zadanie 1 Napisa¢ program, w którym, oprócz w¡tku gªównego, dziaªaj¡ dwa w¡tki robocze. Zadaniem pierwszego jest pobranie od u»ytkownika dwóch liczb caªkowitych i umieszczenie ich w tablicy wspóªdzielonej z drugim w¡tkiem. Gdy liczby zostan¡ podane, w¡tek niezwªocznie powiadamia drugi w¡tek. Drugi w¡tek po uruchomieniu czeka na sygnaª od pierwszego w¡tku, a nast¦pnie wy±wietla iloczyn podanych liczb. Do synchronizacji mi¦dzy w¡tkami nale»y zastosowa¢ semafor. Przykªadowy kod uruchamiaj¡cy w¡tki. Semaphore gotowe = new Semaphore(0); int [] liczby = new int [2]; Czytajacy watek1 = new Czytajacy(liczby, gotowe); Liczacy watek2 = new Liczacy(liczby, gotowe); watek1.start(); watek2.start(); watek1.join(); watek2.join(); Zadanie 2 Napisa¢ program symuluj¡cy korzystanie z parkingu samochodowego. Zarówno wjazd, jak i wyjazd z parkingu zabezpieczone s¡ szlabanami podnoszonymi po naci±ni¦ciu przycisku. Szlaban wjazdowy jest podnoszony pod warunkiem, »e na parkingu s¡ wolne miejsca. W przeciwnym razie kierowcy sygnalizowane jest zapeªnienie parkingu i musi on czeka¢ na zwolnienie miejsca. Sterowaniem pojedynczym samochodem zawarte jest w klasie Samochod. Ka»dy samochód dziaªa w osobnym w¡tku. Samochód wykonuje cyklicznie nast¦puj¡ce czynno±ci (okre±lon¡ w konstruktorze liczb¦ razy): wje»d»a na parking, stoi na parkingu (1-3 sek.), wyje»d»a z parkingu, pewien czas je¹dzi poza parkingiem (1-3 sek.). Kontrol¡ miejsc parkingowych zajmuje si¦ klasa P arking , która ma nast¦- puj¡ce metody publiczne: void wjedz() - metoda ko«czy si¦, gdy na parkingu jest wolne co najmniej jedno miejsce, w przeciwnym razie metoda powoduje wstrzymanie w¡tku, który j¡ wywoªaª; void wyjedz() - metoda aktualizuje stan wolnych miejsc na parkingu, wy- konanie ko«czy si¦ natychmiast. Liczba miejsc parkingowych wynosi 5, liczba samochodów wynosi 10. Przy próbie wjazdu oraz przy wyje¹dzie z parkingu klasa nikaty informacyjne. Podobnie klasa P arking Samochod wy±wietla komu- dziaªaj¡ca w odr¦bnym w¡tku co kilka sekund wy±wietla informacje o liczbie wolnych miejsc parkingowych. Wskazówka: w klasie P arking zastosowa¢ semafor. Zadanie 3 W problemie Producenta-Konsumenta modelowany jest ukªad dwóch obiektów: obiekt klasy Producent produkuje liczby, które umieszcza w buforze o ograniczonej pojemno±ci; obiekt klasy Konsument konsumuje liczby, które w buforze umie±ciª producent; obiekt bufora jest, oczywi±cie, wspóªdzielony mi¦dzy producentem a konsumentem, natomiast producent nie ma bezpo±redniego dost¦pu do konsumenta i na odwrót. Zaimplementuj niezb¦dne klasy (Producent, Konsument, Bufor) i wykonaj symulacj¦, w której producent produkuje ci¡g N = 10i , i ∈ {1, 2, 3, 5} losowych liczb caªkowitych z zakresu [1, 10]. Liczby te s¡ pobierane przez konsumenta. Pojemno±¢ bufora jest ograniczona do 5. Zarówno producent, jak i konsument powinni wypisywa¢ informacje o ka»dej wyprodukowanej, czy skonsumowanej liczbie. Do synchronizacji kooperacji mi¦dzy w¡tkami nale»y zastosowa¢ mechanizm semaforów. Nale»y równie» pami¦ta¢ o konieczno±ci synchronizacji operacji na buforze za pomoc¡ blokad. W celu dodatkowej werykacji poprawno±ci dziaªania programu nale»y doda¢ obliczanie sumy kontrolnej przez producenta dla wyprodukowanych, a przez konsumenta dla odebranych liczb. Oczywi±cie, sumy te powinny si¦ zgadza¢. Przykªad: Producent: Producent: Producent: Konsument: Producent: Konsument: Producent: Konsument: produkuj¦ 6 produkuj¦ 3 produkuj¦ 5 otrzymaªem 6 produkuj¦ 4 otrzymaªem 3 produkuj¦ 4 otrzymaªem 5 Zadanie 4 Plemi¦ tubylców ucztuje zebrane wokóª du»ego kotªa zawieraj¡cego m porcji mi¦sa z upolowanej gazeli. Gdy jaki± tubylec ma ochot¦ si¦ pocz¦stowa¢, to si¦ga do kotªa po porcj¦. Je»eli kocioª jest pusty, to tubylec budzi kucharza, który ponownie napeªnia kocioª. Ka»dy tubylec zaspokoi swój gªód po zjedzeniu porcji. Napisa¢ program wspóªbie»ny zªo»ony z n procesów Tubylec k oraz procesu Kucharz symuluj¡cy opisany scenariusz. Kucharz powinien by¢ budzony jedynie wtedy, gdy kocioª jest pusty. Program przetestowa¢ dla warto±ci n = 3, m = 10, k = 5 wi¦kszych warto±ci. Przykªadowy wydruk: Tubylec 1, zjadªem 1. sztuk¦ Tubylec 3, zjadªem 1. sztuk¦ Tubylec 2, zjadªem 1. sztuk¦ Tubylec 1, zjadªem 2. sztuk¦ Tubylec 3, zjadªem 2. sztuk¦ Tubylec 2, zjadªem 2. sztuk¦ Tubylec 1, zjadªem 3. sztuk¦ Tubylec 3, zjadªem 3. sztuk¦ Tubylec 2, zjadªem 3. sztuk¦ Tubylec 1, zjadªem 4. sztuk¦ Kucharz: napeªniam kocioª Napeªniono kocioª 10 sztukami mi¦sa Tubylec 3, zjadªem 4. sztuk¦ Tubylec 2, zjadªem 4. sztuk¦ Tubylec 1, zjadªem 5. sztuk¦ Tubylec 3, zjadªem 5. sztuk¦ Tubylec 2, zjadªem 5. sztuk¦ Uczta zako«czona oraz dla zestawu Zadanie 5 Wariant zadania producent-konsument. W systemie dany jest jeden w¡tek pro- ducenta oraz n w¡tków konsumentów. Producent produkuje liczby caªkowite i b, z którego s¡ pobierane przez konsumenm liczb. Napisa¢ program symuluj¡cy wspóªprac¦ wstawia je do bufora o rozmiarze tów. ¡cznie produkowane jest producentkonsumenci przy zaªo»eniach: ka»da wiadomo±¢ wysªana przez producenta musi zosta¢ odczytana przez wszystkich konsumentów ka»dy konsument musi odebra¢ wiadomo±ci w kolejno±ci w jakiej zostaªy wysªane. Program przetestowa¢ dla ró»nych warto±ci n, b oraz m, przykªadowo n = 4, b = 3, m = 10. Podobnie jak w poprzednich zadaniach ka»dy konsument powinien wyznacza¢ sum¦ kontroln¡ otrzymywanych liczb. Zadanie 6 - dodatkowe W pewnym supermarkecie jest ª¡cznie K kas. Zasady ich dziaªania przyj¦te przez kierownika sklepu s¡ nast¦puj¡ce: zawsze dziaªaj¡ min. 2 stanowiska kasowe, na ka»dych K klientów znajduj¡cych si¦ na terenie supermarketu powinno przypada¢ min. 1 czynne stanowisko kasowe, je»li liczba klientów jest mniejsza ni» K*(N-1), gdzie N oznacza liczb¦ czynnych kas, to jedna z kas zostaje zamkni¦ta, je»li w kolejce do kasy czekali klienci (przed ogªoszeniem decyzji o jej zamkni¦ciu) to powinni zosta¢ obsªu»eni przez t¦ kas¦. Klienci przychodz¡ do supermarketu w losowych momentach czasu i przebywaj¡ w nim przez pewien okre±lony losowy dla ka»dego z nich czas. Napisz program klienta i kierownika kasjerów.