|
Informatyka UJ forum Rocznik 2005 - czyli najlepsze forum w sieci
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
BU
[świeżak]
Dołączył: 16 Lis 2005
Posty: 15
Przeczytał: 0 tematów
Skąd: Bytom
|
Wysłany: Pią 17:46, 19 Maj 2006 Temat postu: [ćwiczenia mgr Trojanek: 16-18] Notatki z zajęć 19.05 |
|
|
Mam nadziję, ża bez gUpich błędów :P
SYSTEMY OPERACYJNE | cw. 19.05.2006 |
=========================================================
0. PROBLEM FILOZOFOW (je tylko jeden naraz)
bool filozofowie[1..5] = false; // czy czeka
czyKtosJe = false;
chceJesc(){
if czyKtosJe {
filozofowie[id] = true;
filozofowie[id].wait();
}
}
chceMyslec(){
czyKtosJe = false;
i = id;
for (1; i<=4; k = (i+j) mod 5) + 1) {
if filozofowie[k] == true {
filozofowie[i].notify()
filozofowie[i] = false;
}
}
}
=========================================================
1. inne rozwiązanie problemu filozofów
- sprawdzaj czy po lewej stronie ktos czeka: TAK -> czekaj
- konczas jesc puszczaj prawa strone
/do domciu!/
=========================================================
2. PROBLEM JEDZACYCH DZIKUSOW (bo się mnożą)
dane są:
- garnek z porcjami, z ktorego dzikusy jedza
- dzikusy jedza lapami
- dowolna ilosc moze jesc naraz
- PROBLEM SOIE POJAWIA, KIEDY GAR JEST PUSTY
- kiedy gar jest pusty, budzi sie dzikusa-kucharza ktory idze po misjonarza i przyzadza go w garze
- kiedy kucharz przygotowywuje misjonarza, to dzikusy nie moga jesc
- kucharz laduje zawsze potrzebna liczbe porcji
ROZWIAZANIE:
dzikus{
->chceJesc()
jedzenie()
->skonczylJesc()
iloscJedzacych--;
if IloscJedzacych = 0 {notify(iloscJedzacych)}
}
kucharz{
->musiUpichcic()
pichci()
-> upichcil()
kociol.notify();
kucharzSpi = true;
wait(kucharz);
}
bool pusty
iloscJedzacych=0
dzikus.chceJesc(){
notify(kucharz)
while ilosc = 0 {
if kucharzSpi {kucharz.obudzGo() }
kociol.wait()
}
kociol.notify()
ilosc--;
iloscJedzacych++;
}
kucharz.musiUpichcic(){
kucharzSpi = false;
if iloscJedzacych > 0 {wait(iloscJedzacych)}
}
// kolejkowac wg czasu zgloszenia
==============================================
3. KOLEJNE ZAD. DO DOMU:
/z książki: "Little book of semaphores"/
"problem św. Mikoła"
- św. Mikołaj śpi a wtedy elfy przygotowywują zabawki a renifery są na wczasach
- elfy nie zawsze sobie radzą - jak ma problem to idzie do Mikołja. Ponieważ elfy się boją Mikołaja, to czekają aż 3 elfy się zbiorśą na raz i budzą Mikołaja)
- jak 9 reniferow wroci z wczasow, to budza Mikolaja, bo zbliza sie gwiazdka i Mikolaj idzie obsl. samnie
- jezeli jest 9 ren. i 3 elfy to priorytet ma przygotowanie san
// zaimplementowac to :)
|
|
Powrót do góry |
|
|
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
nathaniel
pijak
Dołączył: 25 Paź 2005
Posty: 229
Przeczytał: 0 tematów
Skąd: Bielsko-Biała
|
Wysłany: Pią 19:06, 19 Maj 2006 Temat postu: |
|
|
Fajny pomysł na robienie notatek na bieżąco. Ciekawe czy przeszłoby to u innych ćwiczeniowców?
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Sobek
pijak
Dołączył: 06 Lut 2006
Posty: 323
Przeczytał: 0 tematów
Skąd: Lubaczów / ds16
|
Wysłany: Pon 1:07, 22 Maj 2006 Temat postu: |
|
|
Dzieki :)
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
BU
[świeżak]
Dołączył: 16 Lis 2005
Posty: 15
Przeczytał: 0 tematów
Skąd: Bytom
|
Wysłany: Wto 14:24, 23 Maj 2006 Temat postu: |
|
|
Też proszono, bym umieślił... Czytelnicy-pisarze, wersja poprawiona:
/* PROBLEM CZYTELNIKÓW I PISARZY */
// Wersja z zapobieganiem wystąpienia zagłodzenia i zakleszczenia
boolean czyPisze = false;
int ileCzyta = 0;
int licznikCzyt = 0; // licznik czytelników oczekujących na kolejce
int licznikPis = 0; // licznik pisarzy oczekujących na kolejce
/*
Generalnie jeżeli:
- żaden watek nie działa i czytelnik/pisarz chce wejsc, to wchodzi
- jezeli jakies watki działają, to wątek chcący wejść zawiesza się
na odpowiedniej kolejce
- jeżeli czytelnik wychodzi, to sprawdza, czy istnieje pisarz chcący
wejść i jeżeli tak, to uruchamia go. Jeżeli nie istnieje pisarz, ale
istnieją czytelnicy, to uruchamia ich wszystkich
- analogicznie postępuje pisarz przy wychodzeniu...
A zatem:
- nie wystąpi zagłodzenie, bo czytelnicy i pisarze uruchamiają się
naprzemiennie
- zakleszczenie z w/w powodów też nie wystąpi
*/
void chceCzytac(){
if ((czyPisze) || (licznikPis != 0)){
licznikCzyt++;
wait(kolCzyt);
}
ileCzyta++;
}
void skonczylCzytac(){
ileCzyta--;
if (ileCzyta == 0){
if (licznikPis > 0){
notify(kolPis);
licznikPis--;
} else {
while (licznikCzyt > 0){
licznikCzyt--;
notify(kolCzyt);
}
}
}
}
void chcePisac(){
if ((czyPisze) || (ileCzyta != 0)){
licznikPis++;
wait(kolPis);
}
czyPisze = true;
}
void skonczylPisac(){
czyPisze = false;
if (licznikCzyt > 0){
while (licznikCzyt > 0){
licznikCzyt--;
notify(kolCzyt);
}
} else {
if (licznikPis > 0){
licznikPis--;
notify(kolPis);
}
}
/* HAPPY END */
|
|
Powrót do góry |
|
|
|
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach
|
fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2005 phpBB Group
|