Aryman1983 Napisano Czerwiec 30, 2011 Zgłoszenie Share Napisano Czerwiec 30, 2011 Witam. W szkole zadano nam napisanie skryptu, który rozwiązywałby problem ucztujących filozofów skrypt napisałem lecz pojawił się problem z poleceniem lockfile. Otóż przy zakładaniu blokady dwa procesy mogą zrobić to na tym samym pliku. #!/bin/bash function pobierz { echo `date` Filozof $1 podnosi widelec $2 lockfile -1 -r 1 widelec$2 echo `date` Filozof $1 podnosi widelec $3 lockfile -1 -r 1 widelec$3 } function jedzenie { echo `date` Filozof $1 ucztuje sleep $2 echo `date` Filozof $1 zjadl $3 posilkow } function odloz { echo `date` Filozof $1 odklada widelec $2 rm -f widelec$2 echo `date` Filozof $1 odklada widelec $3 rm -f widelec$3 } function rozmysla { echo `date` Filozof $1 rozmysla sleep $2 } cd katalog skonsumowanych=1 fil=$1 numer1=$1 if [ $numer1 -eq $liczba ] ; then numer2=1 else numer2=$[numer1+1] fi while [ $skonsumowanych -le $posilek ] ; do if [ $(($fil%2)) -eq 0 ] ; then pobierz $fil $numer2 $numer1 jedzenie $fil $limit $skonsumowanych odloz $fil $numer1 $numer2 rozmysla $fil $czeka else pobierz $fil $numer1 $numer2 jedzenie $fil $limit $skonsumowanych odloz $fil $numer2 $numer1 rozmysla $fil $czeka fi ((skonsumowanych++)) done Dorzucę jeszcze plik start żeby, ktoś mógł sobie spojrzeć jak to wygląda w praktyce. #!/bin/bash rmdir katalog mkdir katalog echo "Liczba filozofow: " read liczba readonly liczba; echo "Limit czasowy dla filozofa: " read limit readonly limit; echo "Liczba zjedzonych posilkow: " read posilek readonly posilek; echo "Limit czasowy rozmyslania: " read czeka readonly czeka; x=1 while [ $x -le $liczba ]; do export liczba; export limit; export posilek; export czeka; ./filozof.sh $x & ((x++)) done; Wydaje mi się, że użyłem złych opcji przy lockfile dlatego następny filozof może podnieść ten sam widelec co nie powinno być możliwe. Bardzo proszę o pomoc w rozwiązaniu tego problemu gdyż już brakuje mi pomysłów:( Z góry dziękuję. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
alkuzad Napisano Lipiec 4, 2011 Zgłoszenie Share Napisano Lipiec 4, 2011 Może to wyda się dziwne co powiem, ale czemu to wszystko robisz na plikach i folderach zamiast na zmiennych ? 1 Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
ecik__ Napisano Lipiec 5, 2011 Zgłoszenie Share Napisano Lipiec 5, 2011 Lockfile dziala, ale Ty go zle uzywasz Ja odpalilem ten skrypt i mialem kilka razy: lockfile: Sorry, giving up on "widelec5" Co oznacza, ze nie udalo sie uzyskac locka. Chyba powinienes najpierw zrobic locka, i jesli wynik locka bedzie pozytywny to dopiero wtedy wypisz komunikat, ze podniosl. Poza tym, mozesz uzyc parametru -r -1. Wowczas, lockfile bedzie probowal zalozyc locka na plik az do skutku. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się